黄瓜 – 挂钩

黄瓜 – 挂钩


Cucumber hook可以让我们更好地管理代码工作流,帮助我们减少代码冗余。我们可以说这是一个看不见的步骤,它允许我们执行我们的场景或测试。

为了更好地理解这个概念,让我们以特征文件和步骤定义文件为例。

给定语句中突出显示的部分实际上完成了设置 webdriver 和结束 webdriver 会话的工作。因此,它实际上与“给定语句”的本质无关,而更像是测试的设置。此外,如果我们从更广泛的角度考虑,那么在此功能的多个场景的情况下,此 webdriver 设置和清理将与每个给定的语句一起运行。从逻辑上讲,设置和清理只执行一次是有意义的。

所以为了带来优化,可以利用钩子。我们更经常使用两种类型的钩子:“Before”钩子和“After”钩子。在 Before 和 After 钩子中定义的方法/函数/代码段始终运行,即使场景通过或失败。

顾名思义,before hook 在任何其他测试场景之前执行,而 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 中创建 runner 类作为 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 文件。

    • 右键单击并选择选项 Run as。

    • 选择 JUnit 测试。

所以现在当我们运行它时,以下将是执行顺序。

  • Before hook – 设置 webdriver 和其他先决条件来运行测试。

  • 给定语句

  • 当语句

  • 然后声明

  • After hook – 关闭 webdriver 并执行清理过程。

标记的钩子

我们还可以指示我们是否希望仅使用特定标签执行 before 和 after 钩子。示例– @Before(‘@Web’)。标签逻辑和/或的相同概念也可以应用于钩子。示例– @Before(@dev,@wip), @Before(@dev,~@wip)

觉得文章有用?

点个广告表达一下你的爱意吧 !😁