BDD框架之Cucumber研究
BDD框架之Cucumber研究
引用链接:http://kongqingyun123.blog.163.com/blog/static/6377283520134158437813/
Cucumber是BDD(行为驱动开发)中成熟的一个框架,官方网址: http://cukes.info/
1、cucumber安装
1、安装ruby
2、gem install cucumber 安装cucumber
2、cucumber介绍
cucumber是一种可以使用文本描述语言来执行自动测试用例的工具,使用的语言叫做Gherkin
.
Gherkin用于描述软件的行为而不需要了解具体的实现,的使用主要有两个目的文档和自动测试用例(我们希望能够和手工测试用例也统一)。
Gherkin支持超过40种语言,包括英文、中文。
Gherkin可以在任何地方新增注释,注释已#开头,没一个文件都是已.feature结尾,在feature文件中输入功能描述、场景、步骤,当执行
这个功能时每一个步骤都需要编写ruby代码块来实现具体的功能当前cucumber支持多种语言,除了ruby还可以使用java、javas
3、Features介绍
feature(功能),每一个feature文件都要
开始于Feature(功能),Feature之后的描述可以随便写,知道出现Scenario(场景),一个feature中可以有多个
Scenario,每个Scenario包含(step)步骤列表,步骤使用Given、When、Then、But、And这些关键
词,cucumber对这些关键词的处理是一样的,但是我们在使用的时候需要按照场景区分。
4、Step denfinitions介绍
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替代
6、 Cucumber使用
6、cucumber使用
查看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= action
end
When /^输入是(.*)/ do |subject| @subject = subject
end
Then /^能看到(.*)/ do |greeting|
if greeting != "#{@action}#{@subject}" raise "期望看到<" + greeting + ">,实际看到<" + "#{@action}#{@subject}>"
end
end
6、 执行编写的脚本,在features文件夹的同一目录下运行cucumber命令,则会自动查找features额文件夹下的所有.features结尾的文件进行执行
7、如果按照tag执行,可以使用cucumber –tags @P0 则只执行P0优先级的用例
7、Cucumber-tags功能
详细介绍见:https://github.com/cucumber/cucumber/wiki/Tags
@billing
Feature: Verify billing
@important
Scenario: Missing product description
Scenario: Several products
对Feature或者Scenario都可以增加tag来进行标注,运行时可以选择只运行哪些tag
cucumber –tags @billing
8、Cucumber-Hooks功能
详细介绍见:https://github.com/cucumber/cucumber/wiki/Hooks
Cucumber提供了一些钩子,可以在cucumber的生命周期中调用,可以在support目录下新建文件自定义钩子中的一些处理。
比如下面的代码会在每一个场景的第一个step执行之前调用
Before do |scenario|
# The +scenario+ argument is optional, but if you use it, you can get the title,
# description, or name (title + description) of the scenario that is about to be
# executed.
Rails.logger.debug "Starting scenario: #{scenario.title}"
end
9、Cucumber-Custom Formatters功能
详细介绍见:https://github.com/cucumber/cucumber/wiki/Custom-Formatters
在执行时增加format参数可以输出详细的结果,另外也可以编写自己的format
cucumber --format debug
当前也存在一些一直的format插件,可以把cucumber的运行结果转为html等格式,具体可以见介绍页的最后。
Cucumber –f html –out “test.html”会自动生成html的结果文件
10、Cucumber-Profiles功能
详细介绍见:https://github.com/cucumber/cucumber/wiki/Profiles
可以在当前的工作目录下新建config目录,下面新建cucmber.yml文件,可以在文件中定义一些组合的命令用于cucumber调用
# config/cucumber.yml
##YAML Template
---
html_report: --format progress --format html --out=features_report.html bvt: --tags @bvt
定义完成后可以在cucumber中通过下面命令调用
cucumber –p bvt
cucumber –profile html_report
11、Running Features
运行编写好的Feartures,详细见:
https://github.com/cucumber/cucumber/wiki/Running-Features
cucumber -–help 查看命令的帮助
cucumber 默认运行features目录下面的所有feature
cucumber -–require features features/first.feature 只运行指定feature文件中的用例
cucumber features –name “hello” 运行指定Scenario名称的用例
cucumber features/first.feature:11 运行文件中指定行数对于的Scenario用例
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
cucumber默认是使用Ruby来编写step_denfinitions中的步骤,但是一些测试工具是使用java或者javascript来编写的,比如selenium使用java,不要害怕,cucumber提供了很多不同语言的扩展,也支持java、javascript等。
Cucumber-jvm详细信息见:
https://github.com/cucumber/cucumber-jvm
使用流程:
1、 下载cucumber-jvm相关jar包
下载地址:https://oss.sonatype.org/content/repositories/releases/
cucumber-core.jar 核心包
cucumber-java.jar通过java编写需要下载这个包
cucumber-html.jar生成结果为html文件需要下载这个包
cucumber-junit.jar生成结果为junit格式需要这个包
junit.jar java代码中使用junit
jchronic.jar
2、eclipse中新建一个一般的java工程,引入下载的jar包
3、新建基于java的step_denfinitions文件,这里只需新建一般的java文件即可
下面是一个demo的例子
package com.netease.cucumber.java;
import junit.framework.Assert;
import cucumber.api.java.zh_cn.*;;
public class ChineseDemo {
private String action;
private String subject;
@假如("^当前是(.*)")
public void isChinese(String
action){
this.action = action;
}
@当("^输入是(.*)")
public void input(String
subject){
this.subject = subject;
}
@那么("^能看到(.*)")
public void outPut(String
gretting){
Assert.assertEquals(action + subject, gretting);
}
}
编写完成上面的java文件后,就需要编写你的features文件了
# language: zh-CN
功能:第一个中文程序
中文实现
@P0
场景:中文实现场景
假如当前是中文
当输入是测试
那么能看到中文测试
运行用例
这里使用了官方提供的一个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>
BDD框架之Cucumber研究的更多相关文章
- 行为驱动:BDD框架之Cucumber初探
1.cucumber cucumber早在ruby环境下应用广泛,作为BDD框架的先驱,cucumber后来被移植到了多平台,简单来说cucumber是一个测试框架,就像是juint或是rspec一样 ...
- python BDD 框架之lettuce
http://pythonhosted.org/lettuce/ 介绍 ...
- 虫师Selenium2+Python_12、BDD框架之Lettuce入门
http://www.cnblogs.com/fnng/p/3415609.html P293--简介: TDD(Test-Drivern-Development)测试驱动开发 ATDD(Accept ...
- 移动app框架inoic功能研究
原生移动app框架inoic功能研究 本篇只侧重框架提供的功能和能力的研究,请关注后续实际部署使用体验. 一.inoic是什么? inoic是一个可以使用Web技术以hybird方式开发移动app的前 ...
- BDD框架之lettuce---python3.+安装报错
跟虫师学习python,学到BDD框架之lettuce( http://www.cnblogs.com/fnng/p/3415609.html),发现python3.5环境下安装lettuce后无法正 ...
- Android平台下Dalvik层hook框架ddi的研究
通过adbi,可以对native层的所有代码进行hook.但对于Android系统来说,这还远远不够,因为很多应用都还是在Dalvik虚拟机中运行的. 那么,有没有什么办法可以对Dalvik虚拟机中跑 ...
- 《腾讯敏捷框架TAPD》研究
1 框架结构 1.1 产品 TAPD采用FDD模式开发,FDD即特征驱动开发. FDD的核心是面向产品的功能点,但这个功能点是从客户角度出发的,并不是从系统角度出来的. ...
- .NET 5 开源工作流框架elsa技术研究
今天假期第一天,研究了.NET 5开源工作流框架elsa,现在分享给大家. 一.框架简介 elsa是一个开源的.NET Standard 工作流框架,官方网站:https://elsa-workflo ...
- AsyncHttpClient 开源框架學習研究
转载请注明出处:http://blog.csdn.net/krislight OverView: AsyncHttpClient庫 基於Apache的HttpClient框架,是一個異步的httpCl ...
随机推荐
- C# 汉语生成拼音(微软官方方案)
项目开发中用户的登录名是管理员在后台输入汉字姓名后自动生成的拼音.例如输入:张三,则登录名自动生成ZHANGSAN. 我在网上查阅了很多方法: 如:http://blog.csdn.net/nengz ...
- window.onload与$(document).ready()的对比
一.window.onload:(1)必须等待网页中所有的内容加载完毕后(包括图片)才能执行:(2)不能同时编写多个,如: window.onload = function(){ alert(&quo ...
- 【Oracle】安装注意事项
装了卸载,卸载装,一会儿缺少配置功能,一会对一些莫名的命令操作不能顺利执行.于是还是选择了重装系统.(策略,与其纠结那些个抛错命令和那些烦人的长长的日志,不如重新装系统,这个绝对是最省时间的) 1.安 ...
- [agc004f]Namori 贪心
Description 现在给你一张NN个点MM条边的连通图,我们保证N−1≤M≤NN−1≤M≤N,且无重边和自环. 每一个点都有一种颜色,非黑即白.初始时,所有点都是白色的. 想通过执行 ...
- 基于KMP与Levenshtein模糊匹配算法的银行联行号查询
在人民银行那里,每个银行的每一个营业网点都有自己唯一的银行联行号,根据这个号码能快速定位一间银行具体的分支行,就像根据一个身份证号码能快速确定一个人一样.例如汇款时,汇款单上要求填写收款人开户行,然后 ...
- POJ2299 Ultra-QuickSort (JAVA)
思路是分治,和归并排序一模一样,只是在归并的过程中,顺便统计后半部分序列比前半部分序列小的有多少个 但一直WA,最后是结果数量比较大,会超过int,用long就ac了..做题真坎坷 贴AC代码 imp ...
- 3、激活层(Activiation Layers)及参数
caffe激活层(Activiation Layers) 在激活层中,对输入数据进行激活操作(实际上就是一种函数变换),是逐元素进行运算的.从bottom得到一个blob数据输入,运算后,从top输入 ...
- c# Config配置文件读写
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...
- 编写高质量代码:Web前端开发修炼之道(三)
第五章:高质量的Javascript 这章的内容我看的最久,这是跟我js基础没打好有着莫大的关系,但是还是耐着性子看完了, 不懂的东西都是百度上搜索,理解后再继续.下面是记录下来的笔记. 1)如何避免 ...
- C#集合之集(set)
包含不重复元素的集合称为“集(set)”..NET Framework包含两个集HashSet<T>和SortedSet<T>,它们都实现ISet<T>接口.Has ...