Cucumber - Hooks



Cucumber 的**鉤子**允許我們更好地管理程式碼工作流,並幫助我們減少程式碼冗餘。我們可以說它是一個看不見的步驟,它允許我們執行我們的場景或測試。

為了更好地理解這個概念,讓我們以一個特性檔案和一個步驟定義檔案為例。

給定語句中突出顯示的部分實際上完成了設定 webdriver 和結束 webdriver 會話的工作。所以,它實際上與“給定語句”的本質無關,更像是測試的設定。此外,如果我們從更廣闊的角度來看,那麼對於此特性的多個場景,此 webdriver 設定和清理將與每個給定語句一起執行。從邏輯上講,只有執行一次設定和清理才有意義。

因此,為了進行最佳化,可以使用鉤子。我們通常使用兩種型別的鉤子:“Before”鉤子和“After”鉤子。在 Before 和 After 鉤子中定義的方法/函式/程式碼片段始終執行,即使場景透過或失敗。

顧名思義,before 鉤子在任何其他測試場景之前執行,after 鉤子在執行完所有場景後執行。

鉤子僅在步驟定義檔案中定義。

讓我們自動執行 before 和 after 鉤子的示例。

**步驟 1** - 建立名為 hookTest 的 Maven 專案,在 pom.xml 中新增必要的依賴項。

**步驟 2** - 在**src/test/java**下建立一個名為 hookTest 的 Java 包。

**步驟 3** - 在包下建立一個名為**hookTest.java**的步驟定義檔案。

package hookTest; 

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 hookTest {
   WebDriver driver = null; 
	
   @Before public void setUp(){ 
      driver = new FirefoxDriver(); 
   } 
	
   @Given("^user navigates to facebook$") 
   public void goToFacebook() { 
      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(); 
   } 
	
   @After public void cleanUp(){ 
      driver.close(); 
   } 
}

**步驟 4** - 在包下建立一個名為“hookTest.feature”的特性檔案。

**特性** - 場景大綱。

**場景大綱** - 鉤子測試

給定使用者導航到 Facebook

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

則登入應不成功

示例

| username  | password  | 
| username1 | password1 |

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

  • 在 dataTable 包內建立執行器類為 runTest.java(有關更詳細的步驟,請參閱場景大綱部分)。

  • 編寫以下程式碼。

package hookTest;
 
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 測試。

因此,現在當我們執行它時,執行順序如下。

  • Before 鉤子 - 設定 webdriver 和執行測試的其他先決條件。

  • 給定語句

  • 當語句

  • 則語句

  • After 鉤子 - 關閉 webdriver 並執行清理過程。

帶標籤的鉤子

我們還可以指示是否希望僅使用特定標籤執行 before 和 after 鉤子。**示例** - @Before(‘@Web’)。標籤邏輯與或的概念也可以應用於鉤子。**示例** - @Before(@dev,@wip), @Before(@dev,~@wip)

廣告

© . All rights reserved.