Cucumber - 特点


功能可以定义项目的独立单元或功能。让我们举一个非常常见的社交网站示例。这个产品/项目的特点如何?很少有基本特征可以确定为 -

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

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

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

  • 发送好友请求。

  • 登出。

到目前为止,很明显,当我们谈论 Cucumber 时,被测产品的每个独立功能都可以称为一个功能。当您开始测试时,最好的做法是在派生测试脚本之前,我们应该确定要测试的功能。

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

在 Gherkins 中表示正在测试的功能的关键字是“Feature”。建议的最佳做法是,在功能文件中的功能标题下方编写该功能的简短描述。这也将满足良好文档的需求。

例子

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

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

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

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

特征文件

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

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

例如 -

先生编号 特征 特征 文件名
1 用户登录 用户登录功能
2 分享帖子 分享帖子功能
3 创建账户 创建帐户.功能
4 删除帐户 删除账户.feature

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

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

  • 功能- 被测功能的名称。

  • 描述(可选)- 描述正在测试的功能。

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

  • 给出- 执行测试步骤之前的先决条件。

  • When - 为了执行下一步而应匹配的特定条件。

  • 那么- 如果满足 WHEN 中提到的条件,会发生什么。

例子

Feature − User login on social networking site.

The user should be able to login into the social networking site when the username and the password are correct.

The user should be shown an error message when the username and the password are incorrect.

The user should be navigated to the home page if the username and the password are correct.

Outline − Login functionality for a social networking site.

The given user navigates to Facebook. When I enter Username as "<username>" and Password as "<password>". Then, login should be unsuccessful.

| username  | password  |
| username1 | password1 |

* AND keyword is used to show conjunction between two conditions. AND can be used with any other keywords like GIVEN, WHEN and THEN.

There are no logic details written in the feature file.

Steps Definitions

We have got our feature file ready with the test scenarios defined. However, this is not the complete job done. Cucumber doesn’t really know which piece of code is to be executed for any specific scenario outlined in a feature file.

This calls the need of an intermediate – Step Definition file. Steps definition file stores the mapping between each step of the scenario defined in the feature file with a code of function to be executed.

So, now when Cucumber executes a step of the scenario mentioned in the feature file, it scans the step definition file and figures out which function is to be called.

Example of Step Definition File

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(); 
}

So with each function, whatever code you want to execute with each test step (i.e. GIVEN/THEN/WHEN), you can write it within Step Definition file. Make sure that code/function has been defined for each of the steps.

This function can be Java functions, where we can use both Java and Selenium commands in order to automate our test steps.