Cucumber - 场景大纲



场景大纲基本上用表格中的值替换变量/关键字。表格中的每一行都被视为一个场景。

让我们继续使用 Facebook 登录功能的相同示例。到目前为止,我们一直在执行一个场景:提供正确的用户名后,登录成功。现在,假设我们想检查对于所有三种可能的输入类型(即用户名、电子邮件地址或电话号码),登录是否成功。为此,我们需要编写三个不同的场景,其中每个场景都会因输入类型而异,登录成功。在这种情况下,场景将如下所示。

场景

假设用户导航到 Facebook

当输入正确的用户名和密码时

则登录应成功

场景

假设用户导航到 Facebook

当输入正确的电子邮件地址和密码时

则登录应成功

场景

假设用户导航到 Facebook

当输入正确的电话号码和密码时

则登录应成功

在这里,如果我们仔细观察,对于上述三个场景:语句相同,只有输入参数(用户名/电子邮件地址/电话号码)在变化。这就是场景大纲的重要性所在。

当我们使用场景大纲定义任何场景时,我们可以指定一个测试场景,并在其底部提供多个输入。该场景将根据提供的输入数量执行多次。

示例

让我们创建一个场景大纲的示例 -

步骤 1 - 创建一个名为 ScenarioOutlineTest 的 Maven 测试项目

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

  • 提供 Group Id(Group Id 将唯一标识您的项目跨越所有项目)。

  • 提供 Artifact Id(Artifact Id 是没有版本的 jar 的名称。您可以选择任何小写的名称)。

  • 点击完成。

  • 打开 pom.xml -

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

    • 展开 CucumberTest 项目。

    • 找到 pom.xml 文件。

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

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

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

    • 在依赖项标签内,创建依赖项标签(<dependency></dependency>)。

    • 在依赖项标签内提供以下信息。

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

    • 创建另一个依赖项标签。

    • 在依赖项标签内提供以下信息。

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

    • 创建另一个依赖项标签。

    • 在依赖项标签内提供以下信息。

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

    • 创建另一个依赖项标签。

    • 在依赖项标签内提供以下信息。

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

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

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

步骤 2 - 在 src/test/java 下创建一个名为“outline”的包

Java Package

步骤 3 - 创建一个名为 “outline.feature” 的特性文件

  • 选择并右键单击 outline 包。

  • 点击“新建”文件。

  • 给文件命名为 “outline.feature”

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

      特性 - 场景大纲

      场景大纲 - 社交网络网站的登录功能。

      假设用户导航到 Facebook

      当输入用户名为“<username>”和密码为“<password>”时

      则登录应失败

示例 -

| username  | password  | 
| username1 | password1 | 
| username2 | password2 |

注意 - 在这里,示例注释描述了在场景执行时要提供的输入范围。测试场景将针对提供的每个输入执行。因此,在给定的示例中,测试场景将执行三次。

步骤 4 - 创建一个步骤定义文件。

  • 选择并右键单击 outline 包。

  • 点击“新建”文件。

  • 将文件名命名为 stepdefinition.java

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

package Outline;
 
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 stepdefinition { 
   WebDriver driver = null; 
	
   @Given("^user navigates to facebook$") 
   public void goToFacebook() { 
      driver = new FirefoxDriver(); 
      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(); 
   }    
}

注意 - 在上面的代码中,我们必须定义一个具有两个输入参数的函数:一个用于用户名,另一个用于密码。因此,对于示例标签中提供的每一组输入,将执行一组 GIVEN、WHEN 和 THEN。

步骤 5 - 创建一个运行器类文件。

  • 选择并右键单击 outline 包。

  • 点击“新建”文件。

  • 将文件名命名为 runTest.java

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

package Outline; 

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 测试。

运行此类文件时,您将观察到以下内容

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

  • Username1 和 password1 将作为输入传递给用户名和密码字段。

  • 将点击登录。

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

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

  • 步骤结果 1 到 5 将针对 username2 和 password2 重新执行。

简而言之,当场景不变但只有数据值发生变化时,建议使用场景大纲数据表。

广告