- Cucumber教程
- Cucumber - 首页
- Cucumber - 概述
- Cucumber - 环境
- Cucumber - 小Cucumber
- Cucumber - 特点
- Cucumber - 场景
- Cucumber - 注释
- Cucumber - 场景大纲
- Cucumber - 标签
- Cucumber - 数据表
- Cucumber - 评论
- Cucumber - 钩子
- Cucumber - 命令行选项
- Cucumber - JUnit 运行程序
- Cucumber - 报告
- Cucumber - 调试
- Cucumber - Java 测试
- Cucumber - Ruby 测试
- Cucumber有用资源
- Cucumber - 快速指南
- Cucumber - 有用的资源
- Cucumber - 讨论
Cucumber - 钩子
Cucumber hook可以让我们更好的管理代码工作流程,帮助我们减少代码冗余。我们可以说这是一个看不见的步骤,它允许我们执行我们的场景或测试。
为了更好地理解这个概念,让我们举一个特征文件和步骤定义文件的例子。
给定语句中突出显示的部分实际上完成了设置 webdriver 和结束 webdriver 会话的工作。所以,它实际上与“Given statements”的本质无关,而更像是一个测试的设置。此外,如果我们考虑更广泛的前景,那么在该功能的多个场景的情况下,此 Webdriver 设置和清理将与每个给定的语句一起运行。从逻辑上讲,仅执行一次设置和清理是有意义的。
因此,为了带来优化,可以使用钩子。我们更经常使用两种类型的钩子:“Before”钩子和“After”钩子。在 Before 和 After 挂钩中定义的方法/函数/代码段始终运行,即使场景通过或失败。
顾名思义,before hook 在任何其他测试场景之前执行,而 after hook 在执行所有场景之后执行。
挂钩仅在步骤定义文件中定义。
让我们自动化一个 before 和 after hook 的例子。
步骤 1 - 创建 Maven 项目作为 hookTest,在 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://www.facebook.com/"); } @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://www.facebook.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(); } }
步骤 4 - 在包下创建一个名为“hookTest.feature”的功能文件。
特征- 场景大纲。
场景大纲- 钩子测试
给定用户导航至 Facebook
当我输入用户名“<用户名>”和密码“<密码>”时
那么登录应该不成功
例子
| 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 和 after 挂钩。示例- @Before('@Web')。标签逻辑和/或的相同概念也可以应用于钩子。示例- @Before(@dev,@wip), @Before(@dev,~@wip)