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] - 這表示需要執行匹配這兩個標籤的場景。

廣告
© . All rights reserved.