日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

BDD框架之Cucumber研究

發(fā)布時(shí)間:2023/12/10 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BDD框架之Cucumber研究 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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= action

end

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é)果,另外也可以編寫自己的format

cucumber --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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。