- Cucumber 教程
- Cucumber - 首頁
- Cucumber - 概述
- Cucumber - 環境
- Cucumber - Gherkins
- Cucumber - 特性
- Cucumber - 場景
- Cucumber - 註解
- Cucumber - 場景大綱
- Cucumber - 標籤
- Cucumber - 資料表
- Cucumber - 註釋
- Cucumber - Hooks
- Cucumber - 命令列選項
- Cucumber - JUnit 執行器
- Cucumber - 報告
- Cucumber - 除錯
- Cucumber - Java 測試
- Cucumber - Ruby 測試
- Cucumber 有用資源
- Cucumber - 快速指南
- Cucumber - 有用資源
- Cucumber - 討論
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)