📅  最后修改于: 2020-12-07 04:48:29             🧑  作者: Mango
可以将功能定义为项目的独立单元或功能。让我们以一个非常常见的社交网站为例。该产品/项目的功能如何?几个基本特征可以确定为-
创建用户并将其从社交网站删除。
社交网站的用户登录功能。
在社交网站上共享照片或视频。
发送朋友请求。
登出。
到目前为止,很明显,当我们谈论Cucumber时,可以将被测产品的每个独立功能称为功能。稍后的最佳实践是开始测试,即在派生测试脚本之前,我们应确定要测试的功能。
功能通常包含要针对该功能进行测试的方案的列表。我们在其中存储功能,关于功能的描述以及要测试的场景的文件称为功能文件。我们将在下一章中看到有关功能文件的更多信息。
代表Gherkins中正在测试的功能的关键字是“功能”。建议的最佳实践是在功能文件的功能标题下写一个功能的简短描述。这也将满足对良好文档的需求。
功能-社交网站的登录功能。
如果用户名和密码正确,则用户应该能够登录到社交网站。
如果用户名和密码不正确,应向用户显示错误消息。
如果用户名和密码正确,则应将用户导航到主页。
写入Cucumber测试的文件称为功能文件。建议对于要测试的每个功能,应该有一个单独的功能文件。功能文件的扩展名必须为“ .feature”。
可以根据需要创建任意多个特征文件。要有组织的结构,每个功能都应该有一个功能文件。
例如-
Sr.No | Feature | Feature File name |
---|---|---|
1 | User Login | userLogin.feature |
2 | Share the Post | sharePost.feature |
3 | Create Account | createAccount.feature |
4 | Delete Account | deleteAccount.feature |
用于功能名称,功能文件名称的命名约定取决于个人的选择。黄瓜中没有关于名称的基本规则。
一个简单的功能文件由以下关键字/部分组成-
功能-被测功能的名称。
描述(可选)-描述被测功能。
方案-什么是测试方案。
给定-测试步骤执行之前的先决条件。
何时-应匹配特定条件才能执行下一步。
然后-如果满足WHEN中提到的条件,应该怎么办。
功能-用户在社交网站上的登录。
用户名和密码正确时,用户应该能够登录社交网站。
用户名和密码不正确时,应向用户显示错误消息。
如果用户名和密码正确,则应将用户导航到主页。
概述-社交网站的登录功能。
给定的用户导航到Facebook。当我输入用户名作为“ <用户名>”和密码作为“ <密码>”时。然后,登录应该失败。
| username | password |
| username1 | password1 |
* AND关键字用于显示两个条件之间的合取。 AND可以与GIVEN,WHEN和THEN等任何其他关键字一起使用。
功能文件中没有写入逻辑详细信息。
我们已经准备好功能文件,并定义了测试方案。但是,这并不是完成的全部工作。 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命令来使测试步骤自动化。