引用鏈接: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參數可以輸出詳細的結果,另外也可以編寫自己的formatcucumber --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>