Cucumber入門之_Hooks&Background


Hooks &  Background

 

Hooks 

在很多情況下,我們需要在每個scenario之前(before)和之后(after)執行某些相同的操作。比如說在測試完成后要關閉瀏覽器。在Cucumber中,我們可以使用hooks. 在Cucumber中,有三種不同的hooks:

 

  Before:     在每個scenario前執行

  After:       在每個scenario后執行

  AfterStep: 在每個scenario后執行

 

我們可以把這些hooks放在features文件夾下面的任何ruby文件里面,但一般推薦的做法是把它們放在features/support/hooks.rb 文件里,這樣讓我們更容易記住我們的代碼放在哪。

 

另外,Hooks可以被定義任意次。如果在每個scenario之前有十件不同的事需要我們去處理,我們可以定義十個Before 鈎子(hooks),他們會按定義的順序去執行。

 

當我們有很多個hooks時,我們有時候可能不需要讓它們全部運行,這時候我們就可以使用標簽鈎子(tagged hooks).

 

Tagged Hooks      

標簽hooks跟一般的hooks差不多,但是它只有特定的scenario上運行。即: 跟它有相同tag的 scenario才會執行。

例:

1   Before("@foo") do
2
3     puts "This will run before each scenario tagged with @foo"
4
5   end

 

優缺點:

       優點:很顯然,hooks的優點是可以在每個scenario之前或之后做一些共同的操作。

       缺點:Hooks是在Ruby文件中定義的,對於非技術人員來說是不易讀的,除非case失敗,否則不會有什么證據表明它們的存在。在這種情況下,我們就可以使用Background.

 

Background

當我們希望steps在feature文件里面可見時,我們可以使用background代替Before鈎子,它們可以為每個scenario創建邏輯的上下文。

 

Background會在每個scenario之前執行,就像Before鈎子一樣。但如果存在Before 鈎子,那個它們會先於background執行。

 

當我們有相同的操作時,為了遵守DRY原則,我們可以選擇hooks或background。至於選擇哪一種方式,取決於當它們明確的出現在feature文件里是否有價值。

 

下面看一個小示例:

目錄結構:

 

testhook.feature

 1 Feature: Test how to use hooks
2 In order to learn how to use hooks
3 as a learner
4 I want to do some practice
5
6 @hotel
7 Scenario: search a hotel
8 Given I visit to hotel launch page
9
10 Scenario: search a flight
11 Given I visit to flight launch page

  在該feature文件中定義了兩個scenario,第一個scenario有一個tag: @hotel(為了說明tagged hooks的用法),另一個沒加tag。兩個scenario都只有一個步驟,在這我們就不糾結這些了,只為演示hooks的的用法。

 

testhook.rb

1 Given /^I visit to hotel launch page$/ do
2 puts "The current page is the hotel launch page."
3 end
4
5 Given /^I visit to flight launch page$/ do
6 puts "The current page is the flight launch page."
7 end

  該文件是對feature文件的具體實現,在這兩個Given中我都只是簡單的打印出了一句話。

 

hooks.rb

1 Before do
2 #Before("@hotel") do #tagged hooks
3 puts "This is before hook."
4 end
5
6 After do
7 #After("@hotel") do #tagged hooks
8 puts "This is after hook."
9 end

  在該hooks文件中,我定義了before和after鈎子,也都只是簡單的輸出一句話。注:第2,7行分別為tagged鈎子,當執行它們時,只有跟它們匹配的tag的scenario前/后會執行此hook。

 

運行結果:

執行非tagged hooks:

 1 This is before hook.
2
3 The current page is the hotel launch page.
4
5 This is after hook.
6
7 This is before hook.
8
9 The current page is the flight launch page.
10
11 This is after hook.

 

執行tagged hooks:

1 This is before hook.
2
3 The current page is the hotel launch page.
4
5 This is after hook.
6
7 The current page is the flight launch page.







免責聲明!

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



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