Cucumber - 場景大綱



場景大綱基本上用表格中的值替換變數/關鍵字。表格中的每一行都被視為一個場景。

讓我們繼續使用 Facebook 登入功能的相同示例。到目前為止,我們一直在執行一個場景:提供正確的使用者名稱後,登入成功。現在,假設我們想檢查對於所有三種可能的輸入型別(即使用者名稱、電子郵件地址或電話號碼),登入是否成功。為此,我們需要編寫三個不同的場景,其中每個場景都會因輸入型別而異,登入成功。在這種情況下,場景將如下所示。

場景

假設使用者導航到 Facebook

當輸入正確的使用者名稱和密碼時

則登入應成功

場景

假設使用者導航到 Facebook

當輸入正確的電子郵件地址和密碼時

則登入應成功

場景

假設使用者導航到 Facebook

當輸入正確的電話號碼和密碼時

則登入應成功

在這裡,如果我們仔細觀察,對於上述三個場景:語句相同,只有輸入引數(使用者名稱/電子郵件地址/電話號碼)在變化。這就是場景大綱的重要性所在。

當我們使用場景大綱定義任何場景時,我們可以指定一個測試場景,並在其底部提供多個輸入。該場景將根據提供的輸入數量執行多次。

示例

讓我們建立一個場景大綱的示例 -

步驟 1 - 建立一個名為 ScenarioOutlineTest 的 Maven 測試專案

  • 轉到檔案 → 新建 → 其他 → Maven → Maven 專案 → 下一步。

  • 提供 Group Id(Group Id 將唯一標識您的專案跨越所有專案)。

  • 提供 Artifact Id(Artifact Id 是沒有版本的 jar 的名稱。您可以選擇任何小寫的名稱)。

  • 點選完成。

  • 開啟 pom.xml -

    • 轉到 Eclipse 左側的包資源管理器。

    • 展開 CucumberTest 專案。

    • 找到 pom.xml 檔案。

    • 右鍵單擊並選擇“使用文字編輯器開啟”選項。

  • 新增 Selenium 的依賴項 - 這將指示 Maven,哪些 Selenium jar 檔案要從中央儲存庫下載到本地儲存庫。

    • 開啟 pom.xml 處於編輯模式,在專案標籤內建立依賴項標籤(<dependencies></dependencies>)。

    • 在依賴項標籤內,建立依賴項標籤(<dependency></dependency>)。

    • 在依賴項標籤內提供以下資訊。

<dependency> 
   <groupId>org.seleniumhq.selenium</groupId> 
   <artifactId>selenium-java</artifactId> 
   <version>2.47.1</version> 
</dependency>
  • 新增 Cucumber-Java 的依賴項:這將指示 Maven,哪些 Cucumber 檔案要從中央儲存庫下載到本地儲存庫。

    • 建立另一個依賴項標籤。

    • 在依賴項標籤內提供以下資訊。

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-java</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>
  • 新增 Cucumber-JUnit 的依賴項:這將指示 Maven,哪些 Cucumber JUnit 檔案要從中央儲存庫下載到本地儲存庫。

    • 建立另一個依賴項標籤。

    • 在依賴項標籤內提供以下資訊。

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-junit</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>
  • 新增 JUnit 的依賴項 - 這將指示 Maven,哪些 JUnit 檔案要從中央儲存庫下載到本地儲存庫。

    • 建立另一個依賴項標籤。

    • 在依賴項標籤內提供以下資訊。

<dependency> 
   <groupId>junit</groupId> 
   <artifactId>junit</artifactId> 
   <version>4.10</version> 
   <scope>test</scope> 
</dependency>
  • 驗證二進位制檔案。

    • 成功編輯 pom.xml 後,儲存它。

    • 轉到專案 → 清理 - 這需要幾分鐘。

步驟 2 - 在 src/test/java 下建立一個名為“outline”的包

Java Package

步驟 3 - 建立一個名為 “outline.feature” 的特性檔案

  • 選擇並右鍵單擊 outline 包。

  • 點選“新建”檔案。

  • 給檔案命名為 “outline.feature”

    • 在檔案中寫入以下文字並儲存。

      特性 - 場景大綱

      場景大綱 - 社交網路網站的登入功能。

      假設使用者導航到 Facebook

      當輸入使用者名稱為“<username>”和密碼為“<password>”時

      則登入應失敗

示例 -

| username  | password  | 
| username1 | password1 | 
| username2 | password2 |

注意 - 在這裡,示例註釋描述了在場景執行時要提供的輸入範圍。測試場景將針對提供的每個輸入執行。因此,在給定的示例中,測試場景將執行三次。

步驟 4 - 建立一個步驟定義檔案。

  • 選擇並右鍵單擊 outline 包。

  • 點選“新建”檔案。

  • 將檔名命名為 stepdefinition.java

  • 在檔案中寫入以下文字並儲存。

package Outline;
 
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 stepdefinition { 
   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(); 
   }    
}

注意 - 在上面的程式碼中,我們必須定義一個具有兩個輸入引數的函式:一個用於使用者名稱,另一個用於密碼。因此,對於示例標籤中提供的每一組輸入,將執行一組 GIVEN、WHEN 和 THEN。

步驟 5 - 建立一個執行器類檔案。

  • 選擇並右鍵單擊 outline 包。

  • 點選“新建”檔案。

  • 將檔名命名為 runTest.java

  • 在檔案中寫入以下文字並儲存。

package Outline; 

import org.junit.runner.RunWith; 
import cucumber.junit.Cucumber; 

@RunWith(Cucumber.class) 
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})

public class runTest { }
  • 使用選項執行測試 -

    • 從包資源管理器中選擇 runTest.java 檔案。

    • 右鍵單擊並選擇“以...方式執行”選項。

    • 選擇 JUnit 測試。

執行此類檔案時,您將觀察到以下內容

  • Facebook 在一個新的 Firefox 瀏覽器例項中開啟。

  • Username1 和 password1 將作為輸入傳遞給使用者名稱和密碼欄位。

  • 將點選登入。

  • 瀏覽器上將顯示有關登入失敗的訊息。

  • 在控制檯中,您將看到列印“測試透過”。

  • 步驟結果 1 到 5 將針對 username2 和 password2 重新執行。

簡而言之,當場景不變但只有資料值發生變化時,建議使用場景大綱資料表。

廣告

© . All rights reserved.