- Cucumber 教程
- Cucumber - 首頁
- Cucumber - 概述
- Cucumber - 環境
- Cucumber - Gherkin
- Cucumber - 特性
- Cucumber - 場景
- Cucumber - 註解
- Cucumber - 場景大綱
- Cucumber - 標籤
- Cucumber - 資料表
- Cucumber - 註釋
- Cucumber - Hook
- Cucumber - 命令列選項
- Cucumber - JUnit 執行器
- Cucumber - 報告
- Cucumber - 除錯
- Cucumber - Java 測試
- Cucumber - Ruby 測試
- Cucumber 有用資源
- Cucumber - 快速指南
- Cucumber - 有用資源
- Cucumber - 討論
Cucumber - 標籤
如果一個特性檔案中只有一個、兩個或五個場景,看起來很簡單。然而,在現實生活中並非如此。對於每個被測試的特性,我們可能在一個特性檔案中擁有10個、20個甚至更多的場景。它們可能代表不同的目的(冒煙測試/迴歸測試)、不同的視角(開發人員/QA/業務分析師)、不同的狀態(準備執行/進行中)等等。如何管理如此大量的執行?
為此,Cucumber已經提供了一種方法,可以使用特性檔案中的標籤來組織場景的執行。我們可以用一個有用的標籤定義每個場景。稍後,在執行器檔案中,我們可以決定Cucumber要執行哪些特定的標籤(以及相應的場景)。標籤以“@”開頭。“@”之後可以有任何相關的文字定義你的標籤。讓我們用一個例子來理解這一點。
假設,一個特性檔案中存在兩個或多個場景。我們想只執行一個場景作為冒煙測試的一部分。所以第一步是識別該場景,第二步是在場景的開頭用“@SmokeTest”文字標記它。讓我們仔細看看它——
步驟 1 - 建立一個名為cucumberTag的Maven專案。
步驟 2 - 在src/test/java下建立一個名為cucumberTag的包。
步驟 3 - 建立一個名為cucumberTag.feature的特性檔案。
在檔案中寫入以下文字並儲存。此特性檔案包含兩個場景,其中只有一個被標記為SmokeTest標籤。
特性 - Cucumber 標籤
場景大綱 - 社交網站登入功能。
給定使用者導航到Facebook
當我輸入使用者名稱為"<username>"和密碼為"<password>"
則登入應失敗
示例
| username | password | | username1 | password1 | | username2 | password2 |
#以下場景被標記為SmokeTest,這應該被執行。@SmokeTest
場景
給定使用者導航到Facebook
當我輸入使用者名稱為"<>"和密碼為"<>"
則使用者應被重定向到登入重試
步驟 4 - 建立一個步驟定義檔案。
選擇並右鍵單擊包大綱。
單擊“新建”檔案。
給檔案命名為cucumberTag.java
在檔案中寫入以下文字並儲存。
package cucumberTag;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then;
import cucumber.annotation.en.When;
public class cucumberTag {
WebDriver driver = null;
@Given("^user navigates to facebook$")
public void goToFacebook() {
driver = new FirefoxDriver();
driver.navigate().to("https://#/");
}
@When("^I enter Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$")
public void I_enter_Username_as_and_Password_as(String arg1, String arg2) {
driver.findElement(By.id("email")).sendKeys(arg1);
driver.findElement(By.id("pass")).sendKeys(arg2);
driver.findElement(By.id("u_0_v")).click();
}
@Then("^login should be unsuccessful$")
public void validateRelogin() {
if(driver.getCurrentUrl().equalsIgnoreCase(
"https://#/login.php?login_attempt=1&lwv=110")){
System.out.println("Test Pass");
} else {
System.out.println("Test Failed");
}
driver.close();
}
@Then("^User should be redirected to login retry$")
public void loginRetry() {
if(driver.getCurrentUrl().equalsIgnoreCase(
"https://#/login.php?login_attempt=1&lwv=110")){
System.out.println("Test Pass");
} else {
System.out.println("Test Failed");
}
driver.close();
}
}
步驟 5 - 建立一個執行器類檔案。
在包內建立一個名為runTest.java的執行器類。
編寫以下程式碼。
儲存檔案。
package cucumberTag;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class runTest { }
執行測試選項。
右鍵單擊並選擇“執行方式”選項。
選擇JUnit測試。
執行此類檔案時,您將觀察到以下情況。
Facebook在一個新的Firefox網頁瀏覽器例項中開啟。
不會為使用者名稱和密碼欄位提供任何值。
將點選登入。
將載入登入重試頁面。
在特性檔案中定義標籤沒有限制。根據您的需要,您可以派生要使用的標籤和要執行的場景。
主要有兩種型別的標籤:
預設標籤 - 預設標籤具有預定義的含義。例如@Dev,@Ignore
自定義標籤 - 自定義標籤提供完整的靈活性,您可以選擇合適的文字定義您的標籤。
標籤也可以在特性級別定義。一旦你在特性級別定義了一個標籤,它就確保該特性檔案中的所有場景都繼承該標籤。根據場景的性質,我們可以為單個特性使用多個標籤。每當Cucumber找到合適的呼叫時,將執行特定的場景。
Cucumber還提供了一種反轉標籤選擇的方法。假設在25個已定義的場景中,有10個被標記為冒煙測試。我們需要僅執行迴歸測試場景。
為此,我們可以在JUnit執行器類中使用“~”來排除冒煙測試場景。它看起來如下所示。
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"}, tags = {"~@SmokeTest"})
public class runTest { }
在定義多個標籤時,我們還可以定義邏輯或/和邏輯與運算。
在執行器類中定義邏輯或 - @dev,@wip - 這表示需要執行匹配任何此標籤的場景。
在執行器類中定義邏輯與 - [@dev,~@wip] - 這表示需要執行匹配這兩個標籤的場景。