Cucumber 钩子
Cucumber 中的 Hook 是什么?
在 Cucumber 中,hook 是代码块使用注释 @Before 和 @After。这些@Before 和@After 注释创建了一个我们可以在其中编写代码的块。
Cucumber hook 有助于我们更好地处理代码工作流,也有助于我们减少代码冗余。
语法:
@Before setup ()
{
logic
} @
Scenario
Given
When
And
Then
@After cleanup (){
logic
}
根据代码逻辑,hook 的工作是在特定函数/方法之后启动和关闭 Web 驱动程序会话。因此,实际上,它与任何功能/方法或场景无关。
注意: Hooks 只能在步骤定义文件中定义。
Hook 的需要
在测试的时候,我们可能会遇到需要在测试之前执行一些常规前提步骤的情况测试场景。
考虑以下先决条件以了解在测试时可能遇到的先决条件类型:
启动网络驱动程序
建立数据库连接
设置测试数据
设置浏览器 cookie
导航到某个页面
同样,测试后也总会遇到一些先决条件:
停止网络驱动程序
关闭数据库连接
清除测试数据
清除浏览器 cookie
退出应用程序
打印报告或日志
截取错误截图
为了处理这些类型的常规先决条件步骤,使用cucumber hook是最好的选择。
Hook Annotations
与TestNG Annotations不同,Cucumber只支持两个钩子:
@Before
@After
@Before
顾名思义,我们可以在函数中使用@Before钩子/method之后我们需要启动web驱动程序。
@After
顾名思义,我们可以使用@After 与函数/方法挂钩,然后我们需要关闭 Web 驱动程序。
让我们通过一个步骤定义文件的示例更好地理解这个概念。
示例:
这是一个Maven 测试项目的步骤定义文件的实例。这个项目是为了测试web应用lidihuo而创建的。
为了使用钩子,我们在包lidihuoTest下创建了名为hookTest.java的步骤定义文件。
package lidihuoTest;
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 hookDemo {
WebDriver driver = null;
@Before public void setUp(){
driver = new FirefoxDriver();
}
@Given("^User navigates to lidihuo$")
public void goToFacebook() {
driver.navigate().to("https://www.lidihuo.com/");
}
@When("^ user enter Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$" ")
public void User_enter_Username_and_Password(String arg1, String arg2) {
driver.findElement(By.id("emailAddress")).sendKeys(arg1);
driver.findElement(By.id("password")).sendKeys(arg2);
driver.findElement(By.id("u_0_v")).click();
}
@Then("^login should be unsuccessful$")
public void validateRelogin() {
if(driver.getCurrentUrl().equalsIgnoreCase(
"https://www.lidihuo.com/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();
}
}
当我们执行这段代码时,执行顺序如下:
一开始,@Before 注释将设置网络驱动程序和其他必要的先决条件来执行测试。
设置 Web 驱动程序和其他先决条件后,将执行 Given 语句。
在执行Given 语句后,将执行When 语句。
When 语句执行后,将执行 Then 语句。
现在,@After 钩子将关闭网络驱动程序并执行清理过程。
既然我们知道,要执行步骤定义文件,我们应该有一个完整的Maven测试项目,所以首先在eclipse中创建它。
标记钩子
钩子也可以与标记一起使用。我们可以在特定测试中使用 @before 和 @after 钩子。
示例:
@Before ('@RegressionTest)
@After ('@RegressionTest)
我们也可以使用与逻辑和/或运算符相同的钩子概念。
示例:
@Before ('@RegressionTest, @SmokeTest)
@ After ('@RegressionTest, @SmokeTest)