Cucumber命令行接口

 

1. cucumber的命令行選項html

首先查看命令行選項。和其它命令行工具同樣,cucumber提供了—help選項。下面是cucumber幫助的一個縮減版本:ios

$ cucumber --helpjson

-r,      --require LIBRARY|DIR    Require files before executing the features.瀏覽器

          --i18n LANG   List keywords for in a particular language.Run with "--i18n help" to  see all languages.ruby

-f, --format FORMAT    How to format features (Default: pretty).服務器

-o, --out [FILE|DIR]   Write output to a file/directory instead of STDOUT.工具

-t, --tags TAG_EXPRESSION     Only execute the features or scenarios with tags matching TAG_EXPRESSION.ui

-n, --name NAME    Only execute the feature elements which match part of the given  name.命令行

-e, --exclude PATTERN      Don't run feature files or require ruby files matching PATTERNorm

-p, --profile PROFILE     Pull command line arguments from cucumber.yml.

-P, --no-profile     Disables all profile loading to avoid using the 'default' profile.

-c, --[no-]color    Whether or not to use ANSI color in the output.

-d, --dry-run      Invokes formatters without executing the steps.

-a, --autoformat DIR    Reformats (pretty prints) feature files and writes them to DIR.

-m, --no-multiline   Don't print multiline strings and tables under steps.

-s, --no-source     Don't print the file and line of the step definition with the steps.

-i, --no-snippets     Don't print snippets for pending steps.

-q, --quiet      Alias for --no-snippets --no-source.

-b, --backtrace                                                 -S, --strict        Fail if there are any undefined or pending steps.

-w, --wip         Fail if there are any passing scenarios.

-v, --verbose      Show the files and features loaded.

-g, --guess    Guess best match for Ambiguous steps.

-l, --lines LINES        Run given line numbers. Equivalent to FILE:LINE syntax

-x, --expand       Expand Scenario Outline Tables in output.

      --drb         Run features against a DRb server. (i.e. with the spork gem)

      --port PORT      Specify DRb port.Ignored without --drb

      --version      Show version.

-h, --help            You're looking at it.

 

2. 運行一部分場景

當場景和feature逐漸增加時,咱們會常常運行僅僅一個(或多個)場景,這樣會更快的反饋。當咱們在一個新場景中工做時頗有用。讓咱們看看如何這樣工做:

使用Tag表達式過濾

使用tag選擇最簡單的方法是給它一個單獨的tag,例如:這個命令會讓cucumber運行使用@focus標誌的場景

$ cucumber –tags @focus 須要運行有@focus和@email標誌的全部場景

$ cucumber –tags @focus,@email

應用邏輯AND來代表咱們想要運行由@fast而且由@focus或者@email標誌的場景:

$ cucumber –tags @fast –tags @focus,@email

這裏咱們使用—tags兩次。這兩個會使用AND邏輯連在一塊兒。 少數場景標誌@slow是更有意義的。若是想要運行全部沒有標誌@slow的場景,使用波浪符號:

$ cucumber –gets ~@slow –tags @focus,@email

下面介紹運行一部分場景的另外一種方法。

在line上過濾 Cucumber提供一個方便的方法指定你要運行的場景的行號。例如:

$ cucumber features/something.feature –line 45

若是文件超過一個場景,它就僅僅運行在45行的那個場景。

你可能注意到cucumber打印feature的位置和行號。

features/something.feature:45

若是要從新運行,可使用以下命令:

$cucumber features/something.feature:45

這個命令和使用—line參數效果相同。冒號容許你指定多個行號,容許你指定多個場景來運行:

$ cucumber features/something.feature:45:89:107

若是你喜歡,你也可使用—lines參數來實現這個功能。Cucumber不關心你使用line仍是lines。

使用名稱過濾

若是tag和line過濾都不能知足你的要求,你可使用名稱來過濾。例如,你要運行名稱中包含logout的場景,這些場景分佈在多個feature文件中,而且沒有一個特殊的tag來指定他們。使用下面的方法運行他們:

$ cucumber –name logout

你也可使用—exclude指定一個名稱來排除場景。

3. 改變cucumber的輸出

Cucumber的默認行爲是輸出和Gherkin源文件相似的結果—附帶一些顏色、step定義位置和參數高亮的信息。這並非輸出結果僅有的方式。Cucumber容許你使用一個不一樣的輸出格式。例如:你可使用最小的報告,每一個step只包含一個字符,就是progress格式:

$ cucumber --format progress

..U--..F..

每一個字符表示每一個step的狀態:

l          .意味着經過

l          U意味着未定義

l          -意味着忽略

l          F意味着失敗

Cucumber也有一些內置的格式:html,json和junit。當你在一個持續集成環境中運行cucumber時,junit是很方便的,由於大多數持續集成服務器知道如何解釋JUnit報告。下面更詳細。

特殊的格式器

Cucumber綁定了一些格式,能夠建立輸出,但這些輸出並不真是用來做爲運行報告的。這個格式更可能是來幫助開發的。

Usage格式列出你的工程中全部的step定義,和使用step定義的step。它顯示了沒有使用的step定義,使用平均執行時間對step定義進行排序。Usage的輸出能夠很快找出緩慢的部分,也是一個對你的step定義全面把握的好方法。

Stepdefs格式和usage很想,信息有點減小。

最後還有一個rerun格式。這是一個特殊的格式:

$ cucumber -f rerun

若是全部的場景都經過,rerun格式不會輸出任何信息。然而,若是有失敗場景,它會輸出他們的位置,你能夠拷貝和粘貼輸出來從新運行場景。當確認失敗場景時,這個選項能夠節省不少時間。

爲文件指定格式和使用多個格式

一般,全部格式都會打印到輸出窗口。所以,若是咱們想要看一般的pretty輸出,可是想要一個html或者rerun格式怎麼辦呢?使用—out選項便可。它告訴cucumber不要輸出到控制檯,輸出到文件中。例如:

$ cucumber -f pretty -f html --out cukes.html -f rerun --out rerun.txt

這個命令告訴cucumber編寫HTML報告到cukes.html中,編寫rerun報告到rerun.txt文件中,最終顯示pretty格式到控制檯上。

顯示完整回溯堆棧

使用—backtrace選項致使cucumber爲每一個失敗打印完整的回溯調用。當你在查找bug時很是有用。

4. 指定step定義的位置

你有沒有奇怪:cucumber如何找到你的step定義?cucumber只會在featues/step_definitions中指望找到他們。事實上,若是你重命名這兩個目錄爲jolly/jumper,運行cucumber jolly,也能正常運行。

Cucumber遞歸地掃面一個目錄的rb文件來加載,若是在他們裏面有step定義,他們就會被加載。理解什麼目錄會被cucumber掃描是很重要的。一旦你理解了它,你就從疑惑中解放出來。演示一個例子,加入你這樣管理你的feature和step定義:

features

├── billing

│      └── credit_card.feature

├── scoring

│      ├── multi_player.feature

│      └── single_player.feature

└── step_definitions

├── billing_steps.rb

└── scoring_steps.rb

若是你使用cucumber features或者cucumber來運行,一切都很正常。若是有一天你添加一個新場景到credit_card.feature來支持一個新credit卡。而後運行:

$ cucumber features/billing/credit_card.feature:104 -f progress

UUUU

全部的step都是未定義的,即便你的新場景都是重用的已存在的step定義。爲step定義和支持代碼掃描的目錄是由feature文件決定的。若是你給了一個feature文件,它就會在它的目錄下查找rb文件。若是你給它一個目錄,它就會在那個目錄下查找。你能夠經過—verbose選項查看cucumber在哪裏尋找代碼。

解決這個問題的方案是使用—require來顯式告訴cucumber到哪兒去加載代碼。前一個例子正確的方式是:

$ cucumber features/billing/credit_card.feature:104 -f progress -r features

...F

咱們的代碼如今就能找到而且加載了,咱們能夠繼續開發咱們的新場景。你也能夠經過一個自定義配置文件來實現它。

5. 在Progress中管理你的工做

你應該儘可能避免存在大量的pending或者半成品的feature和場景。這會讓咱們很難保持注意力,它對每一個feature的交付週期也有影響。對於開始啓動但未完成的工做,有一個術語叫work in progress,簡稱爲WIP。若是你的項目保持WIP的低數量,每一個feature的週期時間也會更短。

Cucumber幫助你管理你的WIP,使用tag和—wip選項。儘可能養成爲每一個場景的習慣,正在進行時標記@wip,經過時移除這個tag。若是你的項目組贊成一直保持WIP少於3個。可使用下列命令強制執行:

$ cucumber –wip @wip:3

這也有一些有趣的影響。首先若是cucumber發現超過3個@wip場景,它會當即失敗,不會執行任何場景。這個標誌說明這裏有太多的場景正在工做中,一些場景須要經過(或者移除掉@wip),另外一些才能添加進來。

另外一個影響是:任何場景經過(記住,你僅僅運行@wip的場景),cucumber也會失敗。這種失敗提醒你移除@wip標誌。

6. 使用profiles

當你對不一樣的命令行選項感興趣後,試着使用更多的選項,在命令行中一遍又一遍地輸入他們是很枯燥的。Cucumber容許你存儲命令行選項,保存到一個cucumber.yml文件中。 這個文件必須放在你工程目錄下或者在config目錄下。下面是一個例子:

default: --tags ~@wip --require features

wip:  --tags @wip:3 --wip --require features

如今,若是你運行cucumber –profile wip,關鍵字wip的命令行選項會自動附加到你的命令行中。若是你沒有指定—profile,cucumber會使用default的選項。注意:咱們添加了—require features到全部profile中。由於,咱們想要讓cucumber自動加載definitions和支持代碼,無論咱們想要運行哪一個文件夾中的feature。

7. 從Rake中運行cucumber

不少項目使用構建工具來執行經常使用任務。對於ruby工程,Rake是實際上的構建工具。Cucumber有一個Rake任務,使得從rake中運行cucumber很容易。若是你使用cucumber-Rails,自動安裝時,你就會有Rake任務。

若是你尚未使用Rake,本身安裝很容易。在你的工程根目錄下添加這個到Rakefile文件中。

require 'cucumber/rake/task'

Cucumber::Rake::Task.new # defines a task named cucumber

如今你能夠從Rake中運行Cucumber:

$ rake cucumber

當你從Rake中運行cucumber時,cucumber.yml中的profile會自動執行,可是你能夠在Rakefile中定義命令行選項:

Cucumber::Rake::Task.new('cucumber_progress') do |t|

t.cucumber_opts = %w{--format progress}

end

如今你知道從本地命令行和Rake中兩種方式如何運行cucumber,你也可使用你的持續集成環境來運行它。若是任何場景失敗,Cucumber會有1做爲狀態碼,所以你的持續集成服務能夠正確檢測失敗。

8. 在CI(持續集成)中運行cucumber

不少項目組安裝他們的CI來每次運行cucumber,互相共享改變。所以這是一個命令行工具,沒有任何須要作的,僅僅須要把cucumber命令放入到CI工程的配置下就好了。

你可能想要爲CI使用一些不一樣的命令行選項。你能夠經過定義一個特殊的profile。

Being Strict

當咱們開發一個新場景時,存在未實現的或者pending的step是很正常的。一些項目組盡力保存主線上沒有這樣的step。

CI系統經過檢查進行的推出狀態來檢測失敗。若是有一個或多個失敗的step,默認cucumber僅僅存在一個失敗狀態。若是你在CI環境中運行Cucumber,若是有人添加了未實現的step或者pending的step,你可能想要它失敗。

若是咱們傳人—strict選項,若是未實現的或者pending的step就會和failing同樣,返回非0值。你能夠在運行cucumber後檢查返回值。

# OS X or Linux

$ echo $?

# Windows

$ echo %ERRORLEVEL%

共享報告

前面咱們看到如何使用—format選項改變cucumber的輸出。若是傳入--out JUNIT_DIR --format junit到cucumber中,你能夠配置CI服務器來從JUNIT_DIR中獲取報告,而後分析。一些CI服務器能夠生成趨勢圖,向你展現你的構建是如何變得健康的。這是一個很好的方法:檢測你的項目是進化了仍是倒退了。

你也可使用--out HTML_FILE --format html來生成HTML報告。若是你有瀏覽器自動化工具,這就很是好用,由於你能夠嵌入瀏覽器的截圖到HTML報告中。

相關文章
相關標籤/搜索