BDD框架之Cucumber研究
BDD框架之Cucumber研究
?
引用鏈接:http://kongqingyun123.blog.163.com/blog/static/6377283520134158437813/
?
Cucumber是BDD(行為驅(qū)動(dòng)開發(fā))中成熟的一個(gè)框架,官方網(wǎng)址: http://cukes.info/
1、cucumber安裝
1、安裝ruby
2、gem install cucumber 安裝cucumber
2、cucumber介紹
cucumber是一種可以使用文本描述語言來執(zhí)行自動(dòng)測(cè)試用例的工具,使用的語言叫做Gherkin .
Gherkin用于描述軟件的行為而不需要了解具體的實(shí)現(xiàn),的使用主要有兩個(gè)目的文檔和自動(dòng)測(cè)試用例(我們希望能夠和手工測(cè)試用例也統(tǒng)一)。 Gherkin支持超過40種語言,包括英文、中文。 Gherkin可以在任何地方新增注釋,注釋已#開頭,沒一個(gè)文件都是已.feature結(jié)尾,在feature文件中輸入功能描述、場(chǎng)景、步驟,當(dāng)執(zhí)行 這個(gè)功能時(shí)每一個(gè)步驟都需要編寫ruby代碼塊來實(shí)現(xiàn)具體的功能當(dāng)前cucumber支持多種語言,除了ruby還可以使用java、javas
cript來編寫步驟層3、Features介紹
feature(功能),每一個(gè)feature文件都要 開始于Feature(功能),Feature之后的描述可以隨便寫,知道出現(xiàn)Scenario(場(chǎng)景),一個(gè)feature中可以有多個(gè) Scenario,每個(gè)Scenario包含(step)步驟列表,步驟使用Given、When、Then、But、And這些關(guān)鍵 詞,cucumber對(duì)這些關(guān)鍵詞的處理是一樣的,但是我們?cè)谑褂玫臅r(shí)候需要按照?qǐng)鼍皡^(qū)分。
4、Step denfinitions介紹
Cucumber中定義的每一個(gè)step(步驟)都需要有一個(gè)step definition對(duì)應(yīng),默認(rèn)的話是使用Ruby來編寫定義的腳本(現(xiàn)在有cucumber-js等也支持javascript、java等來編寫),支持通過正則表達(dá)式從step中傳遞參數(shù)。Step definition的詳細(xì)說明可以參考
https://github.com/cucumber/cucumber/wiki/Step-Definitions
5、Given When then(假如 當(dāng) 那么)
Cucumber的步驟中會(huì)包含Given、When、then這些詞組,cucumber本身在技術(shù)實(shí)現(xiàn)上不區(qū)分這三個(gè)詞組,但是在使用上推薦按照詞組的意思來使用。
Given-用例開始執(zhí)行前的一個(gè)前置條件,類似與編寫代碼setup中的一些步驟
When-用例開始執(zhí)行的一些關(guān)鍵操作步驟,類似點(diǎn)擊元素等
Then-觀察結(jié)果,就是平時(shí)用例中的驗(yàn)證步驟
And-一個(gè)步驟中如果存在多個(gè)Given操作,后面的Given可以用And替代
But-一個(gè)步驟中如果存在多個(gè)Then操作,第二個(gè)開始后面的Then可以用But替代
?
6、 Cucumber使用
6、cucumber使用
?
查看cucumber支持的語言 cucumber --i18n help
查看支持語言的關(guān)鍵字 cucumber –i18n zh-CN
創(chuàng)建Demo
1、 新建一個(gè)demo文件件
2、 demo文件夾下新建features文件夾
3、 features文件夾下新建”中文.feature”文件,后綴必須是.fearure結(jié)尾
中文的話最前面必須增加# language: zh-CN
# language: zh-CN
功能:第一個(gè)中文程序
中文實(shí)現(xiàn)
場(chǎng)景:中文實(shí)現(xiàn)場(chǎng)景
假如當(dāng)前是中文
當(dāng)輸入是測(cè)試
那么能看到中文測(cè)試
?
?
4、 新建step_denfinitions文件夾
5、step_denfinitions中新建step_steps.rb文件編寫步驟定義(這里默認(rèn)使用Ruby編寫)
Given /^當(dāng)前是(.*)/ do |action|
@action= actionend
When /^輸入是(.*)/ do |subject| @subject = subject
end
Then /^能看到(.*)/ do |greeting|
? if greeting != "#{@action}#{@subject}"???? raise "期望看到<" + greeting + ">,實(shí)際看到<" + "#{@action}#{@subject}>"
? end
end
?
?
?
6、 執(zhí)行編寫的腳本,在features文件夾的同一目錄下運(yùn)行cucumber命令,則會(huì)自動(dòng)查找features額文件夾下的所有.features結(jié)尾的文件進(jìn)行執(zhí)行
7、如果按照tag執(zhí)行,可以使用cucumber –tags @P0? 則只執(zhí)行P0優(yōu)先級(jí)的用例
?
?
7、Cucumber-tags功能
?
詳細(xì)介紹見:https://github.com/cucumber/cucumber/wiki/Tags
@billing
Feature: Verify billing?? ?
@important? ?
Scenario: Missing product description
Scenario: Several products
對(duì)Feature或者Scenario都可以增加tag來進(jìn)行標(biāo)注,運(yùn)行時(shí)可以選擇只運(yùn)行哪些tag
cucumber –tags @billing
?
?
8、Cucumber-Hooks功能
?
詳細(xì)介紹見:https://github.com/cucumber/cucumber/wiki/Hooks
Cucumber提供了一些鉤子,可以在cucumber的生命周期中調(diào)用,可以在support目錄下新建文件自定義鉤子中的一些處理。比如下面的代碼會(huì)在每一個(gè)場(chǎng)景的第一個(gè)step執(zhí)行之前調(diào)用
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功能
?
?
詳細(xì)介紹見:https://github.com/cucumber/cucumber/wiki/Custom-Formatters
在執(zhí)行時(shí)增加format參數(shù)可以輸出詳細(xì)的結(jié)果,另外也可以編寫自己的formatcucumber --format debug
當(dāng)前也存在一些一直的format插件,可以把cucumber的運(yùn)行結(jié)果轉(zhuǎn)為html等格式,具體可以見介紹頁的最后。
Cucumber –f html –out “test.html”會(huì)自動(dòng)生成html的結(jié)果文件
10、Cucumber-Profiles功能
詳細(xì)介紹見:https://github.com/cucumber/cucumber/wiki/Profiles
可以在當(dāng)前的工作目錄下新建config目錄,下面新建cucmber.yml文件,可以在文件中定義一些組合的命令用于cucumber調(diào)用# config/cucumber.yml
##YAML Template
---
html_report: --format progress --format html --out=features_report.html?? bvt: --tags @bvt
定義完成后可以在cucumber中通過下面命令調(diào)用
cucumber –p bvt
cucumber –profile html_report
11、Running Features
運(yùn)行編寫好的Feartures,詳細(xì)見:
https://github.com/cucumber/cucumber/wiki/Running-Features
cucumber -–help 查看命令的幫助cucumber 默認(rèn)運(yùn)行features目錄下面的所有feature
cucumber -–require features features/first.feature 只運(yùn)行指定feature文件中的用例
cucumber features –name “hello” 運(yùn)行指定Scenario名稱的用例
cucumber features/first.feature:11 運(yùn)行文件中指定行數(shù)對(duì)于的Scenario用例
12、持續(xù)集成結(jié)合
?
詳細(xì)見:https://github.com/cucumber/cucumber/wiki/Continuous-Integration
cucumber支持運(yùn)行時(shí)生成junit格式的xml結(jié)果文件,用于在Jenkins中自動(dòng)來解析xml文件生成結(jié)果內(nèi)容
cucumber –f junit –out “junit”
通過上面的命令可以執(zhí)行所有的feature,每一個(gè)feature文件都會(huì)生成一個(gè)xml的結(jié)果文件,可以用于在和持續(xù)集成整合。
13、Cucumber-jvm
?
cucumber默認(rèn)是使用Ruby來編寫step_denfinitions中的步驟,但是一些測(cè)試工具是使用java或者javascript來編寫的,比如selenium使用java,不要害怕,cucumber提供了很多不同語言的擴(kuò)展,也支持java、javascript等。?
Cucumber-jvm詳細(xì)信息見:
https://github.com/cucumber/cucumber-jvm
?
使用流程:
1、 下載cucumber-jvm相關(guān)jar包
下載地址:https://oss.sonatype.org/content/repositories/releases/
cucumber-core.jar 核心包
cucumber-java.jar通過java編寫需要下載這個(gè)包
cucumber-html.jar生成結(jié)果為html文件需要下載這個(gè)包
cucumber-junit.jar生成結(jié)果為junit格式需要這個(gè)包
junit.jar java代碼中使用junit
jchronic.jar
2、eclipse中新建一個(gè)一般的java工程,引入下載的jar包
3、新建基于java的step_denfinitions文件,這里只需新建一般的java文件即可
下面是一個(gè)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;
?
??? @假如("^當(dāng)前是(.*)")
??? public void isChinese(String action){
?????? this.action = action;
??? }
??? @當(dāng)("^輸入是(.*)")
??? public void input(String subject){
?????? ?this.subject = subject;
??? }
?
??? @那么("^能看到(.*)")
??? public void outPut(String gretting){
?????? ?Assert.assertEquals(action + subject, gretting);
??? }
}
編寫完成上面的java文件后,就需要編寫你的features文件了
# language: zh-CN
功能:第一個(gè)中文程序
中文實(shí)現(xiàn)
@P0
場(chǎng)景:中文實(shí)現(xiàn)場(chǎng)景
假如當(dāng)前是中文
當(dāng)輸入是測(cè)試
那么能看到中文測(cè)試
運(yùn)行用例
這里使用了官方提供的一個(gè)build文件來運(yùn)行,支持通過命令行的方式,具體支持哪些參數(shù)官方也沒有詳細(xì)的文檔,暫時(shí)只了解到下面一些
詳細(xì)的build文件可以參考:
https://github.com/cucumber/cucumber-jvm/blob/master/examples/java-helloworld/build.xml
這里簡(jiǎn)單介紹一下具體運(yùn)行的幾個(gè)參數(shù)
<target name="runcukes" depends="compile-test">
??????? <mkdir dir="target/cucumber-junit-report"/>
??????? <!-- cucumber.api.cli.Main這里是cucumber-jvm的運(yùn)行入口方法 -->
??????? <java classname="cucumber.api.cli.Main" fork="true" failοnerrοr="false" resultproperty="cucumber.exitstatus">
??????????? <classpath refid="classpath"/>
??????????? <!-- 這里參數(shù)是生成junit格式的xml文件,后續(xù)可以和ci平臺(tái)整合 -->
?? ?????????<arg value="--format"/>
??????????? <arg value="junit:target/cucumber-junit-report.xml"/>
????????
??????????? <!-- 這里是生成一份html格式的結(jié)果報(bào)告 -->
??????????? <arg value="--format"/>
??????????? <arg value="html:target/cucumber-html-report"/>
?????????? ?<!-- com.netease.cucumber.java這個(gè)包名下面定義了自己編寫的step,features下面定義了詳細(xì)的用例執(zhí)行步驟 -->
??????????? <arg value="--glue"/>
??????????? <arg value="com.netease.cucumber.java"/>
????????? ?? <arg value="features/"/>
????????? ?? <!-- 按照tags選擇需要運(yùn)行的用例 -->
????????? ?? <arg value="--tags"/>
??????????? <arg value="@P0"/>
??????? </java>
轉(zhuǎn)載于:https://www.cnblogs.com/digod/p/9895772.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的BDD框架之Cucumber研究的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务容错
- 下一篇: java中split以“.“ 、“\“、