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

cript來編寫步驟層

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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM