在上一篇中,我們寫出了Selenium + Cucumber + Java環境下的第一個BDD自動化測試用例,這一篇我們說說怎么用標簽對用例進行分組。
3.1 Cucumber標簽
實際工作中,我們的自動化用例庫可能會變得非常龐大。如果只是按照先前的方式去執行,則每一次都會執行全部用例,真實使用時這是不現實的。
Cucumber給我們提供一種用標簽來組織自動化用例的辦法,通過分別在feature和scenario級別上定義一個或多個標簽,然后再在runner類里定義要執行的標簽情況,就可以達到測試分組的目的。
標簽以“@”開頭。在“@”之后,可以使用任何相關文字來定義標簽。
根據實際的工作場景,我們可以定義出各種各樣的標簽,因為標簽的起名是自由的,比如:
- 根據測試活動的不同可以定義:@SanityTest @RegressionTest @FunctionalTest
- 根據測試用例的不同優先級可以定義:@P1 @P2 @P3
- 根據測試的功能模塊來定義:@UserManagement @ProductDetail @CheckOutFlow
等等等等,以上的標簽名字都是自定義的。很好理解,比如打了@SanityTest標簽的用例,就是一個做完整性測試的用例。
一個feature或者scenario都可以有多個標簽,而由於scenario和feature之間又有一定的從屬關系,可以理解為feature所擁有的標簽都會被他內部的scenario繼承。
3.2 Cucumber標簽實例
我們在features文件夾下面,新建一個叫TestTags.feature的文件。
文件里寫入以下gherkin代碼:
@AddToBasket Feature: Test JD add item into basket Description @JD @SanityTest @FunctionalTest @P1 Scenario: Add first product into basket from PDP Given I navigate to JD site When I search for a keyword And I pick the first item from PLP And I add that particular item into basket Then That particular item is added @JD @FunctionalTest @P2 Scenario: Add secondary product into basket from PDP Given I navigate to JD site When I search for a keyword And I pick the second item from PLP And I add that particular item into basket Then That particular item is added
在這個特性文件里,我們定義了一個特性,包括兩個場景。可以看到Feature這個層級有一個@AddToBasket的標簽,而場景1和2之間的區別是,場景1屬於@SanityTest並且優先級為@P1。
3.3 通過runner類實現分組執行
接下來只需要在runner類中,將標簽進行一個選擇就可以了。
比如,我們想要讓有@SanityTest標簽的用例進行執行,那么我們的runner類應該如下編寫:
package CucumberRunner; import org.junit.runner.RunWith; import cucumber.api.CucumberOptions; import cucumber.api.junit.Cucumber; @RunWith(Cucumber.class) @CucumberOptions(features="Features",glue="stepDefinitions",tags="@SanityTest") public class CucumberRunner { }
我們再通過這個runner類去執行cucumber用例的時候,就會只執行有相應標簽的scenario。
Runner類中選擇標簽也是可以多選,而且還可以選擇排除某些標簽。
比如說,tags="@SanityTest, @P1"就是執行所有擁有這兩個標簽的用例。(注意這里是‘或’關系)。
又比如,tags="@FunctionalTest, ~@P2"就是執行所有FunctionalTest並且不為P2的用例。~符號表示排除某個標簽。
到此為止,通過對features和scenario打標簽,然后通過runner選擇標簽去執行,我們就可以實現測試分組的目的。
下一篇我們來實現cucumber用例的參數化。