📜  Cucumber-方案大纲

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


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

让我们继续相同的Facebook登录功能示例。到目前为止,我们已经在执行一种方案:提供正确的用户名后,登录成功。现在,假设我们要检查三种可能的输入类型(用户名,电子邮件地址或电话号码)的登录是否成功。为此,我们将需要编写三种不同的方案,其中每种方案都将随输入类型而变化,登录成功。在这种情况下,方案将如下所示。

场景:

给定用户导航到Facebook

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

然后登录应该成功

场景:

给定用户导航到Facebook

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

然后登录应该成功

场景:

给定用户导航到Facebook

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

然后登录应该成功

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

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

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

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

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

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

  • 提供工件ID(工件ID是不带版本的jar的名称。您可以选择任何小写的名称)。

  • 单击完成。

  • 打开pom.xml-

    • 转到Eclipse左侧的Package Explorer。

    • 展开项目CucumberTest。

    • 找到pom.xml文件。

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

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

    • 以编辑模式打开pom.xml,在项目标签内创建依赖关系标签( )。

    • 在依赖关系标签内,创建依赖关系标签( )。

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

 
   org.seleniumhq.selenium 
   selenium-java 
   2.47.1 

  • 添加对Cucumber-Java的依赖关系:这将指示Maven,哪些Cucumber文件将从中央存储库下载到本地存储库。

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

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

 
   info.cukes 
   cucumber-java 
   1.0.2 
   test 

  • 添加对Cucumber-JUnit的依赖关系:这将指示Maven,哪些Cucumber JUnit文件将从中央存储库下载到本地存储库。

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

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

 
   info.cukes 
   cucumber-junit 
   1.0.2 
   test 

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

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

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

 
   junit 
   junit 
   4.10 
   test 

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

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

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

 
   junit 
   junit 
   4.10 
   test 

  • 验证二进制文件。

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

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

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

Java包

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

  • 选择并右键单击程序包轮廓。

  • 点击“新建”文件。

  • 输入文件名,例如“ outline.feature”

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

      功能-方案大纲

      方案大纲-社交网站的登录功能。

      给定用户导航到Facebook

      当我输入用户名作为“ <用户名>”和密码作为“ <密码>”时

      然后登录应该失败

示例

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

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

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

  • 选择并右键单击程序包轮廓。

  • 点击“新建”文件。

  • 将文件名命名为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(); 
   }    
}

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

步骤5-创建亚军类文件。

  • 选择并右键单击程序包轮廓。

  • 点击“新建”文件。

  • 提供文件名,例如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 Web浏览器实例中打开。

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

  • 单击登录。

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

  • 在控制台中,您将看到“ Test Pass”打印。

  • 步骤结果1至5将针对用户名2和密码2重新执行。

简而言之,当方案不更改而仅数据值被更改时,建议使用方案大纲数据表。