cucumber是一种可以使用文本描述语言来执行自动测试用例的工具,使用的语言叫做Gherkin.
Gherkin用于描述软件的行为而不需要了解具体的实现,使用Gherkin主要有两个目的文档和自动测试用例(我们希望能够和手工测试用例也统一)。Gherkin支持超过40种语言,包括英文、中文。Gherkin可以在任何地方新增注释,注释以#开头,每一个文件都是已.feature结尾,在feature文件中输入功能描述、场景、步骤,当执行这个功能时每一个步骤都需要编写ruby代码块来实现具体的功能,当前cucumber支持多种语言,除了ruby还可以使用java、javascript来编写具体定义层的实现。Cucumber中定义的每一个step(步骤)都需要有一个step definition对应,默认的话是使用Ruby来编写定义的脚本(现在有cucumber-js等也支持javascript、java等来编写),支持通过正则表达式从step中传递参数。Step definition的详细说明可以参考
https://github.com/cucumber/cucumber/wiki/Step-Definitions
5、Given When then(假如 当 那么)
Cucumber的步骤中会包含Given、When、then这些词组,cucumber本身在技术实现上不区分这三个词组,但是在使用上推荐按照词组的意思来使用。
Given-用例开始执行前的一个前置条件,类似与编写代码setup中的一些步骤
When-用例开始执行的一些关键操作步骤,类似点击元素等
Then-观察结果,就是平时用例中的验证步骤
And-一个步骤中如果存在多个Given操作,后面的Given可以用And替代
But-一个步骤中如果存在多个Then操作,第二个开始后面的Then可以用But替代
查看cucumber支持的语言 cucumber --i18n help
查看支持语言的关键字 cucumber –i18n zh-CN
创建Demo
1、新建一个demo文件件
2、demo文件夹下新建features文件夹
3、features文件夹下新建”中文.feature”文件,后缀必须是.fearure结尾
中文的话最前面必须增加# language: zh-CN
# language: zh-CN
功能:第一个中文程序
中文实现
场景:中文实现场景
假如当前是中文
当输入是测试
那么能看到中文测试
4、新建step_denfinitions文件夹
5、step_denfinitions中新建step_steps.rb文件编写步骤定义(这里默认使用Ruby编写)
Given /^当前是(.*)/ do |action|
@action= actionend
When /^输入是(.*)/ do |subject| @subject = subject
end
Then /^能看到(.*)/ do |greeting|
if greeting != "#{@action}#{@subject}" raise "期望看到<" + greeting + ">,实际看到<" + "#{@action}#{@subject}>"
end
end
7、Cucumber-tags功能
详细介绍见:https://github.com/cucumber/cucumber/wiki/Tags
8、Cucumber-Hooks功能
详细介绍见:https://github.com/cucumber/cucumber/wiki/Hooks
Cucumber提供了一些钩子,可以在cucumber的生命周期中调用,可以在support目录下新建文件自定义钩子中的一些处理。9、Cucumber-Custom Formatters功能
详细介绍见:https://github.com/cucumber/cucumber/wiki/Custom-Formatters
在执行时增加format参数可以输出详细的结果,另外也可以编写自己的format 10、Cucumber-Profiles功能
详细介绍见:https://github.com/cucumber/cucumber/wiki/Profiles
可以在当前的工作目录下新建config目录,下面新建cucmber.yml文件,可以在文件中定义一些组合的命令用于cucumber调用11、Running Features
运行编写好的Feartures,详细见:
https://github.com/cucumber/cucumber/wiki/Running-Features
cucumber -–help 查看命令的帮助12、持续集成结合
详细见:https://github.com/cucumber/cucumber/wiki/Continuous-Integration
cucumber支持运行时生成junit格式的xml结果文件,用于在Jenkins中自动来解析xml文件生成结果内容
cucumber –f junit –out “junit”
通过上面的命令可以执行所有的feature,每一个feature文件都会生成一个xml的结果文件,可以用于在和持续集成整合。
13、Cucumber-jvm
package com.netease.cucumber.java;
import junit.framework.Assert;
import cucumber.api.java.zh_cn.*;;
publicclass ChineseDemo {
private String action;
private String subject;
@假如("^当前是(.*)")
publicvoid isChinese(Stringaction){
this.action = action;
}
@当("^输入是(.*)")
publicvoid input(Stringsubject){
this.subject = subject;
}
@那么("^能看到(.*)")
publicvoid outPut(Stringgretting){
Assert.assertEquals(action + subject, gretting);
}
}
运行用例
这里使用了官方提供的一个build文件来运行,支持通过命令行的方式,具体支持哪些参数官方也没有详细的文档,暂时只了解到下面一些
详细的build文件可以参考:
https://github.com/cucumber/cucumber-jvm/blob/master/examples/java-helloworld/build.xml
这里简单介绍一下具体运行的几个参数
<target name="runcukes"depends="compile-test">
<mkdir dir="target/cucumber-junit-report"/>
<!--cucumber.api.cli.Main这里是cucumber-jvm的运行入口方法 -->
<java classname="cucumber.api.cli.Main"fork="true" failonerror="false"resultproperty="cucumber.exitstatus">
<classpath refid="classpath"/>
<!-- 这里参数是生成junit格式的xml文件,后续可以和ci平台整合 -->
<arg value="--format"/>
<arg value="junit:target/cucumber-junit-report.xml"/>
<!-- 这里是生成一份html格式的结果报告 -->
<arg value="--format"/>
<arg value="html:target/cucumber-html-report"/>
<!-- com.netease.cucumber.java这个包名下面定义了自己编写的step,features下面定义了详细的用例执行步骤 -->
<arg value="--glue"/>
<arg value="com.netease.cucumber.java"/>
<arg value="features/"/>
<!-- 按照tags选择需要运行的用例 -->
<arg value="--tags"/>
<arg value="@P0"/>
</java>