Cucumber - 注解



注解 (Annotation) 是预定义的文本,具有特定含义。它让编译器/解释器知道在执行时应该做什么。Cucumber 有以下几种注解:

  • Given -

    • 它描述了执行测试的先决条件。

    • 示例 - GIVEN 我是一个 Facebook 用户

  • When -

    • 它定义了任何测试场景执行的触发点。

    • 示例 - WHEN 我输入 "<username>"

  • Then -

    • Then 包含要执行测试的预期结果。

    • 示例 - THEN 登录应该成功。

  • And -

    • 它提供任何两个语句之间的逻辑 AND 条件。AND 可以与 GIVEN、WHEN 和 THEN 语句结合使用。

    • 示例 - WHEN 我输入我的 "<username>" AND 我输入我的 "<password>"

  • But -

    • 它表示任何两个语句之间的逻辑 OR 条件。OR 可以与 GIVEN、WHEN 和 THEN 语句结合使用。

    • 示例 - THEN 登录应该成功。BUT 首页不应该丢失。

  • Scenario -

    • 在关键字“Scenario:”之后需要捕获被测场景的详细信息。

    • 示例 -

      Scenario

      GIVEN 我是一个 Facebook 用户

      WHEN 我输入我的

      AND 我输入我的

      THEN 登录应该成功。

      BUT 首页不应该丢失。

  • Scenario Outline - (稍后讲解)

  • Examples - (稍后讲解)

  • Background -

    • Background 通常包含在每个场景运行之前要设置的指令。但是,它在“Before” hook (稍后讲解) 之后执行。因此,当我们想要设置 web 浏览器或建立数据库连接时,这非常适合用于代码。

      • 示例 -

        Background

        转到 Facebook 首页。

示例场景

让我们自动化一个场景以便更好地理解注解。

步骤 1

创建一个名为 AnnotationTest 的 Maven 测试项目。

  • 转到 文件 → 新建 → 其他 → Maven → Maven 项目 → 下一步。

  • 提供 group Id(group Id 将唯一标识您在所有项目中的项目)。

  • 提供 artifact Id(artifact Id 是 jar 的名称,不包含版本号。您可以选择任何小写的名称)。

  • 单击完成。

  • 打开 pom.xml -

    • 转到 Eclipse 左侧的包资源管理器。

    • 展开 AnnotationTest 项目。

    • 找到 pom.xml 文件。

    • 右键单击并选择选项“使用文本编辑器打开”。

  • 添加 Selenium 的依赖项 - 这将指示 Maven 从中央存储库下载哪些 Selenium jar 文件到本地存储库。

    • 打开 pom.xml 并处于编辑模式,在 project 标签内创建 dependencies 标签 (<dependencies></dependencies>)。

    • 在 dependencies 标签内,创建 dependency 标签 (<dependency></dependency>)。

    • 在 dependency 标签内提供以下信息。

<dependency> 
   <groupId>org.seleniumhq.selenium</groupId> 
   <artifactId>selenium-java</artifactId> 
   <version>2.47.1</version> 
</dependency>
  • 添加 Cucumber-Java 的依赖项 - 这将指示 Maven 从中央存储库下载哪些 Cucumber 文件到本地存储库。

    • 创建另一个 dependency 标签。

    • 在 dependency 标签内提供以下信息。

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-java</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>
  • 添加 Cucumber-JUnit 的依赖项 - 这将指示 Maven 从中央存储库下载哪些 Cucumber JUnit 文件到本地存储库。

    • 创建另一个 dependency 标签。

    • 在 dependency 标签内提供以下信息。

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-junit</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>
  • 添加 JUnit 的依赖项 - 这将指示 Maven 从中央存储库下载哪些 JUnit 文件到本地存储库。

    • 创建另一个 dependency 标签。

    • 在 dependency 标签内提供以下信息。

<dependency> 
   <groupId>junit</groupId> 
   <artifactId>junit</artifactId> 
   <version>4.10</version> 
   <scope>test</scope> 
</dependency>
  • 验证二进制文件。

    • 成功编辑 pom.xml 后,保存它。

    • 转到 项目 → 清理 - 这需要几分钟。

步骤 2

src/test/java 下创建一个名为 Annotation 的包

  • 选择新创建的项目。

  • 右键单击并选择“新建”。

  • 选择“包”选项。

  • 将其命名为“Annotation”。

  • 保存。

步骤 3

创建一个名为 annotation.feature 的特性文件。

  • 选择并右键单击包大纲。

  • 单击“新建文件”。

  • 为文件命名,例如 outline.feature

  • 在文件中写入以下文本并保存。

Feature: annotation 
#This is how background can be used to eliminate duplicate steps 

Background: 
   User navigates to Facebook Given 
   I am on Facebook login page 

#Scenario with AND 
Scenario: 
   When I enter username as "TOM"
   And I enter password as "JERRY" 
   Then Login should fail 

#Scenario with BUT 
Scenario: 
   When I enter username as "TOM" 
   And I enter password as "JERRY" 
   Then Login should fail 
   But Relogin option should be available

步骤 4

创建一个步骤定义文件。

  • 选择并右键单击包大纲。

  • 单击“新建文件”。

  • 将文件名命名为 annotation.java

  • 在文件中写入以下文本并保存。

package Annotation; 

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 annotation { 
   WebDriver driver = null; 
   @Given("^I am on Facebook login page$") 
	
   public void goToFacebook() { 
      driver = new FirefoxDriver(); 
      driver.navigate().to("https://www.facebook.com/"); 
   }
	
   @When("^I enter username as \"(.*)\"$") 
   public void enterUsername(String arg1) {   
      driver.findElement(By.id("email")).sendKeys(arg1); 
   }
	
   @When ("^I enter password as \"(.*)\"$") 
   public void enterPassword(String arg1) {
      driver.findElement(By.id("pass")).sendKeys(arg1);
      driver.findElement(By.id("u_0_v")).click(); 
   } 
	
   @Then("^Login should fail$") 
   public void checkFail() {  
      if(driver.getCurrentUrl().equalsIgnoreCase(
         "https://www.facebook.com/login.php?login_attempt=1&lwv=110")){ 
            System.out.println("Test1 Pass"); 
      } else { 
         System.out.println("Test1 Failed"); 
      } 
      driver.close(); 
   }
	
   @Then("^Relogin option should be available$") 
   public void checkRelogin() { 
      if(driver.getCurrentUrl().equalsIgnoreCase(
         "https://www.facebook.com/login.php?login_attempt=1&lwv=110")){ 
            System.out.println("Test2 Pass"); 
      } else { 
         System.out.println("Test2 Failed"); 
      } 
      driver.close(); 
   }
} 

步骤 5

创建一个运行器类文件。

  • 选择并右键单击包大纲。

  • 单击“新建文件”。

  • 为文件命名,例如 runTest.java

  • 在文件中写入以下文本并保存。

package Annotation; 

import org.junit.runner.RunWith; 
import cucumber.junit.Cucumber; 

@RunWith(Cucumber.class) 
@Cucumber.Options(format = {"pretty", "html:target/cucumber"}) 

public class runTest { }

步骤 6

使用以下选项运行测试:

  • 从包资源管理器中选择 runTest.java 文件。

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

  • 选择 JUnit 测试。

运行此类文件时,您将观察到以下情况:

  • Facebook 在新的 Firefox 浏览器实例中打开。

  • TOM 将作为输入传递给用户名字段。

  • JERRY 将作为输入传递给密码字段。

  • 将点击登录。

  • 浏览器上将显示有关登录失败的消息。

  • 在控制台中,您将看到打印“测试通过”。

  • 步骤结果 1 到 5 将针对用户名为 "" 和密码为 "" 的情况重新执行。

广告