1.Gherkin簡介:
Cucumber是一個解釋程序,就像ruby命令執行解釋 .rb文件里的Ruby代碼一樣,Cucumber用來執行解釋 .feature文件里的Gehrkin代碼。
2. 關鍵字:
當你編寫一個feature文件的時候,會用到很多Gherkin語言里特定的關鍵字,主要包括下這面些:
• Feature
• Background
• Scenario
• Scenario outline
• Scenarios (or examples)
• Given
• When
• Then
• And (or but)
• | (用來定義表格)
• """ (定義多行字符串)
• # (注釋)
我們可以在關鍵字后面寫任何我們想寫的東西。關鍵字Given, When, Then, And 和 But用來指示一個場景中的步驟。
每一個feature文件必須以關鍵字Feature開始,且緊跟著一個冒號和一個描述。這個描述可以在很多行上,但一般來說比較好的模式是寫一句簡短的概述,緊接著在下一行對此進行一個簡明的描述。比如:
Feature: Book flight
In order to book a flight
As a user
I want to find the cheapest flight
當然有一點需要指出的是,Cucumber并不關心你在這里寫了什么。它只是簡單的忽略這些代碼直到它碰到關鍵字Background, Scenario 和 Scenario Outline. 我們寫這些的目的僅僅是為了溝通和交流。
3. Scenarios/Steps/The cucumber Command
1. Scenario:一個feature文件里面可以有很多個Scenario,一個Scenario就是一個具體的你想要測試的功能點,一個Scenario又是由很多個步驟(Steps)組成的。Scenario明確的描述我們期望的程序的行為,且方便不同職位的人員進行溝通,因為你只要看到一個Scenario,很容易就知道它想做什么。
一個Scenario的第一部分是Scenario關鍵字后面緊跟一個冒號和一個對應該場景的描述。如下:
Feature: Book flight
In order to book a flight
As a user
I want to find the cheapest flight
Scenario: Successful booking flight
2. Steps:每個Scenario都可以使用任意數量的步驟來描述任何發生在該場景里的事情,一個步驟通常是一行單獨的文本并且由以下這些關鍵字開頭:Given,When,Then,And and But. 如下:(注意:步驟后面不需要跟冒號)
Feature: Book flight
In order to book a flight
As a user
I want to find the cheapest flight
Scenario: Successful booking flight
Given I visit a website to book flight
3. The cucumber Command: 一旦我們寫好了一個feature文件,我們就可以使用 cucumber 命令來運行它。如果cucumber命令后不跟任何東西的話,那么它會執行所有的.feature文件。如果我們只想運行某一個.feature文件,我們可以使用命令cucumber features\feature_name
4.Given/When/Then/And/But
a) Given:表示scenario中我們接受/認為是真的東西,它將為后面的when(事件/操作)和Then(輸出)提供背景/上下文;如:Given I visit a website
b)When:表示scenario中的事件或動作;如:When I click the submit button.; 一般我們喜歡在一個scenario中只有一個事件或動作,因為這樣容易理解scenario的目的且容易找到錯誤當失敗的時候;
c) Then:表示預期的輸出;
d) And/ But: 我們可以使用And 和 But 作為Given/When/Then的同義詞,如:”Given x, And y,” 這里的And就是Given的意思;再如:”Then x, But not y,” 這里的But就是Then的意思;
例:
Scenario: transfer money (declarative)
Given I have $100 inchecking
And I have $20 insavings
When I transfer $15 from checking to savings
Then I should have $85 inchecking
And I should have $35 insavings
5. Tags:
正如前面提到的一個.feature 文件里面可以有很多scenario組成。如果我們運行了一個包含有很多個scenario的feature文件時,它會執行這個文件里面所有的scenario;但是有的時候我們可能只想運行某一個/些特別的scenario時,這時我們可以使用Tags;
在Cucumber里Tag看上去和Ruby的實例變量比較像。如@wip, @foo…可以在Feature或Scenario關鍵字前給feature或scenario添加任意數量的tags,如:
@approved @book_flight
Feature: Book flight
@wip
Scenario: Book a flight on web
一個Scenario會繼承指定給Feature的tags,所以在上面的例子中,Scenario有三個tags:@approved @book_flight @wip. 然后我們就可以使用命令:cucumber --tags tag_name來運行我們想運行的那部分Scenario.如:cucumber –tags @wip
此外,--tags還支持復雜的表示示,包括: AND,OR和NOT,如下:
cucumber –tags @foo,@bar
#@foo || @bar 運行所有包含@foo OR @bar的scenarios
cucumber --tags @foo --tags @bar
# @foo && @bar 運行所有包含@foo AND @bar的scenarios
cucumber --tags ~@dev
#!@dev 運行所有不包含@dev的scenario
cucumber --tags @foo,~@bar --tags @baz
# (@foo || !@bar) && @baz
注:本文內容來自《The RSpec Book》一書,本人只做記錄,水平有限,如果需要可查看原版圖書。
不含病毒。www.avast.com |
留言列表