Cucumber - 功能

功能可以定义为项目的独立单元或功能。我们以社交网站为例。该产品/项目的功能是什么样的?一些基本功能可以确定为 −

  • 从社交网站创建和删除用户。

  • 社交网站的用户登录功能。

  • 在社交网站上分享照片或视频。

  • 发送好友请求。

  • 注销。

现在,很明显,当我们谈论 Cucumber 时,被测产品的每个独立功能都可以称为一个功能。最佳实践是,在开始测试后,在导出测试脚本之前,我们应该确定要测试的功能。

功能通常包含要针对该功能进行测试的场景列表。我们存储功能、功能描述和要测试的场景的文件称为功能文件。我们将在下一章中看到有关功能文件的更多信息。

在 Gherkins 中表示正在测试的功能的关键字是"功能"。建议的最佳实践是在功能文件中的功能标题下方写一个简短的功能描述。这也将满足良好文档的需求。

示例

功能 −社交网站的登录功能。

如果用户名和密码正确,用户应该能够登录社交网站。

如果用户名和密码不正确,应该向用户显示错误消息。

如果用户名和密码正确,应该将用户导航到主页。

功能文件

编写 Cucumber 测试的文件称为功能文件。建议每个测试功能都应该有一个单独的功能文件。功能文件的扩展名需要为".feature"。

可以根据需要创建任意数量的功能文件。为了拥有一个有组织的结构,每个功能都应该有一个功能文件。

例如 −

Sr.No 功能 功能文件名
1 用户登录 userLogin.feature
2 分享帖子 sharePost.feature
3 创建帐户 createAccount.feature
4 删除帐户 deleteAccount.feature

用于功能名称、功能文件名称的命名约定取决于个人选择。Cucumber 中没有关于名称的基本规则。

一个简单的功能文件由以下关键字/部分组成 −

  • 功能 − 测试中功能的名称。

  • 描述(可选) − 描述测试中功能的情况。

  • 场景 − 测试场景是什么。

  • 给定 − 执行测试步骤前的先决条件。

  • 何时 − 执行下一步时应满足的特定条件。

  • 然后 − 如果满足 WHEN 中提到的条件,应该发生什么。

示例

功能 −用户登录社交网站。

当用户名和密码正确时,用户应该能够登录社交网站。

当用户名和密码不正确时,应该向用户显示错误消息。

如果用户名和密码正确,用户应该导航到主页。

概述 − 社交网站的登录功能。

给定用户导航到 Facebook。当我输入用户名为"<username>"并将密码输入为"<password>"时。然后,登录应该失败。

| username  | password  |
| username1 | password1 |

* AND 关键字用于显示两个条件之间的连接。 AND 可以与任何其他关键字一起使用,例如 GIVEN、WHENTHEN

功能文件中没有写入任何逻辑细节。

步骤定义

我们已经准备好了功能文件,并定义了测试场景。但是,这并不是完整的工作。Cucumber 并不知道针对功能文件中概述的任何特定场景要执行哪段代码。

这需要中间步骤定义文件。步骤定义文件存储功能文件中定义的场景的每个步骤与要执行的函数代码之间的映射。

因此,现在当 Cucumber 执行功能文件中提到的场景的步骤时,它会扫描步骤定义文件并找出要调用哪个函数。

步骤定义文件示例

public void goToFacebook() { 
   driver = new FirefoxDriver(); 
   driver.navigate().to("https://www.facebook.com/"); 
} 
@When "^user logs in using 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/THEN/WHEN)中执行什么代码,您都可以在步骤定义文件中编写它。确保已为每个步骤定义了代码/函数。

此函数可以是 Java 函数,我们可以使用 Java 和 Selenium 命令来自动化我们的测试步骤。