欢迎开启Cucumber之旅。Cucumber是当前最流行的行为驱动开发框架(Behavior-Driven Development BDD)之一,同时拥有大量的粉丝。我们在本系列培训里面将更深入地了解Cucumber以及其遵循软件开发模型。
Cucumber 是一个支持行为驱动开发 (BDD) 的测试框架。 它让我们可以用自然语言描述测试场景,例如关键字假如、当、那么等.Cucumber 支持多种开发语言,例如Java、JavaScript、Python、Go、PHP、C#、VB.NET等。
1 Cucumber 介绍 2.1 Cucumber Cucumber是一个行为驱动开发工具(Behaviour-Driven Development,简称BDD).Cucumber读取以纯文本形式编写的可执行规范,并验证软件是否按照这些规范的要求执行。这些规范由多个示例或场景组成。例如:
1
2
3
4
场景: 用户输入错误的密码登录系统
假设 用户输入了正确的用户名但密码错误
当 用户点击登录按钮
那么 系统提示用户名或密码错误
每个场景都是Cucumber需要执行的测试步骤列表,Cucumber验证待测软件是否满足场景步骤,并为每个测试场景步骤生成测试报告显示验证通过或失败情况。
2.2 Gherkin Gherkin是一套语,通过套语法Cucumber就可以理解(解析)纯文本的语法结构,Cucumber执行的场景用例就是用Gherkin语法写的。 Gherkin的功能包括:
明确的可执行的规范 使用Cucumber进行自动化测试 记录系统的实际行为 Cucumber可以使用不同的自然语言来描述场景,用户团队可以选择自己熟悉的语言来使用Cucumber。Gherkin文档以.feature的文本文件格式来保存,通常可以上传到Git或SVN等版本控制服务器上进行版本管理。
2.3 步骤定义 步骤是Gherkin和自动化测试代码的连接器。步骤定义约定了应该执行的步骤,步骤中可以实现对待测对象(UT、API、UI)的测试执行代码。
2 安装Cucumber及相关工具 这里只介绍Cucumber-JVM 的安装,Cucumber-JVM是Cucumber的Java版,支持Java常见的工程管理工具Maven、Grandle。JDK 推荐使用JDK 1.8
2.1 安装JDK Oracle JDK 下载地址:
1
https://www.oracle.com/java/technologies/downloads/#java8
? Open JDK 下载地址:
1
https://www.openlogic.com/openjdk-downloads
2.2 安装Maven Maven 建议使用3.6.0以上版本。
Maven 下载地址:
1
https://maven.apache.org/download.cgi
2.3 安装IDE 2.3.1 IntelliJ IDEA Intellij IDEA 推荐使用Cucumber插件,Cucumber插件具有下列功能:
语法和错误高亮显示;自动补全;步骤定义快速修复;步骤定义和步骤间快速切换;功能特性文件中国际化语言支持;
Intellij IDEA 下载地址:
1
https://www.jetbrains.com/zh-cn/idea/promo/
2.3.2 Eclipse Cucumber Eclipse Plugin 插件具有以下特性:
支持Cucumber-Java8 Lambda语法功能特性文件内容辅助步骤定义向导功能特性步骤自动生成国际化关键字高亮产品特性格式化展现产品特性运行
Eclipse 下载地址:
1
https://www.eclipse.org/downloads/packages/
3 创建Cucumber项目 3.1 引入依赖 创建一个Maven项目,pom.xml文件中引入Cucumber所需的依赖包。 pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
4.0.0
org.bddall
cucumber-java-starter
0.0.1
jar
Cucumber-Java Starter
UTF-8
1.8
4.13.2
6.10.4
3.8.1
2.22.2
io.cucumber
cucumber-java
${cucumber.version}
test
io.cucumber
cucumber-junit
${cucumber.version}
test
junit
junit
${junit.version}
test
org.apache.maven.plugins
maven-compiler-plugin
${maven.compiler.version}
UTF-8
${java.version}
${java.version}
org.apache.maven.plugins
maven-surefire-plugin
${maven.surefire.version}
3.2 创建工程目录结构 cucumber-jvm Maven工程目录下一般包括一下目录
src/main/java //Java代码 src/main/resources //配置文件资源 src/test/java //测试Java代码 src/test/resources // features 文件和其它配置文件 src/pom.xml //Maven工程文件,管理依赖包和构建配置 3.3 一个简单测试场景 在src/test/resources目录下创建一个login.feature文件,文件内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
# language: zh-CN
功能: 用户登录
场景大纲: 账号密码登录
假如 用户进入登录页面
当 用户需要输入用户名和密码然后点击登录按钮
那么 用户登录平台并显示当前姓名
@positive
例子: 有效用户名和密码
| UserName | Password | NickName |
| devops | 123456 | bdd |
在src/test/java目录下创建一个cucumber启动类 RunCucumberTest,启动类配置如下:
1
2
3
4
5
@RunWith(Cucumber.class)
@CucumberOptions(plugin = {"pretty", "html:target/cucumber-report.html"})
public class RunCucumberTest {
}
在src/test/java目录下创建一个步骤定义类 LoginStepdefs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package org.bddall.cucumber;
import io.cucumber.java.zh_cn.假如;
import io.cucumber.java.zh_cn.当;
import io.cucumber.java.zh_cn.那么;
public class LoginStepdefs {
@假如("用户进入登录页面")
public void 用户进入登录页面() {
// Write code here that turns the phrase above into concrete actions
throw new io.cucumber.java.PendingException();
}
@当("用户需要输入用户名devopstools和密码123456然后点击登录按钮")
public void 用户需要输入用户名devopstools和密码123456然后点击登录按钮() {
// Write code here that turns the phrase above into concrete actions
throw new io.cucumber.java.PendingException();
}
@那么("用户登录平台并显示当前姓名bdd")
public void 用户登录平台并显示当前姓名bdd() {
// Write code here that turns the phrase above into concrete actions
throw new io.cucumber.java.PendingException();
}
}
我们将在后续的文章中介绍如何在步骤定义中加入测试业务代码,例如API测试或Selenium的Web应用测试。
3.4 测试结果报告 运行一下命令:
浏览器打开html测试报告,Cucumber测试报告放在 target/cucumber-report.html
Demo运行效果