📜  Cucumber-挂钩

📅  最后修改于: 2020-12-07 04:52:06             🧑  作者: Mango


黄瓜挂钩使我们能够更好地管理代码工作流程,并帮助我们减少代码冗余。我们可以说这是一个看不见的步骤,它使我们能够执行场景或测试。

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

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

因此,要进行优化,可以利用钩子。通常,我们使用两种类型的钩子:“ Before”钩子和“ After”钩子。即使在方案通过或失败的情况下,Before和After挂钩中定义的方法/函数/代码段也始终运行。

顾名思义,在执行钩子之前要早于任何其他测试方案,而在执行所有方案后要先执行钩子之后。

挂钩仅在步骤定义文件中定义。

让我们自动化一个挂钩前后的示例。

步骤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文件。

    • 右键单击并选择选项“运行方式”。

    • 选择JUnit测试。

因此,现在当我们运行此命令时,将执行以下顺序。

  • 挂接之前-设置Web驱动程序和其他先决条件以运行测试。

  • 给定声明

  • 何时声明

  • 然后声明

  • 挂接后-关闭WebDriver并执行清理过程。

标签钩

我们还可以指示我们是否只希望使用特定标签执行挂钩之前和之后。示例-@Before(’@ Web’)。标签逻辑和/或标记的相同概念也可以与钩子一起应用。示例-@Before(@ dev,@ wip),@ Before(@ dev,〜@ wip)