黄瓜 – 特点
黄瓜 – 特点
甲功能可以被定义为一个项目的一个独立的单元或功能。让我们举一个非常常见的社交网站示例。这个产品/项目的特性如何?很少有基本特征可以确定为 –
-
从社交网站创建和删除用户。
-
社交网站的用户登录功能。
-
在社交网站上分享照片或视频。
-
发送好友请求。
-
登出。
到目前为止,很明显,当我们谈论 Cucumber 时,被测产品的每个独立功能都可以称为一个特性。最佳实践是稍后开始测试时,在派生测试脚本之前,我们应该确定要测试的功能。
一个功能通常包含要为该功能测试的场景列表。我们在其中存储功能、有关要测试的功能和场景的描述的文件称为Feature File。我们将在下一章中看到更多关于特征文件的信息。
在 Gherkins 中表示被测功能的关键字是“功能”。建议的最佳做法是,在功能文件中的功能标题下方写下对该功能的简短描述。这也将满足良好文档的需要。
例子
功能– 社交网站的登录功能。
如果用户名和密码正确,用户应该能够登录到社交网站。
如果用户名和密码不正确,则应向用户显示错误消息。
如果用户名和密码正确,用户应导航到主页。
功能文件
编写 Cucumber 测试的文件称为特征文件。建议每个被测试的功能都有一个单独的功能文件。特征文件的扩展名需要是“.feature”。
可以根据需要创建任意数量的特征文件。为了有一个有组织的结构,每个特征都应该有一个特征文件。
例如 –
Sr.No | 特征 | 特征文件名 |
---|---|---|
1 | 用户登录 | 用户登录功能 |
2 | 分享帖子 | sharePost.feature |
3 | 创建帐号 | createAccount.feature |
4 | 删除帐户 | 删除账户功能 |
用于特征名称、特征文件名的命名约定取决于个人的选择。Cucumber 中没有关于名称的基本规则。
一个简单的功能文件由以下关键字/部分组成 –
-
功能– 被测功能的名称。
-
描述(可选)- 描述被测功能。
-
场景– 什么是测试场景。
-
Given – 执行测试步骤之前的先决条件。
-
When – 为了执行下一步而应匹配的特定条件。
-
那么– 如果满足 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),您都可以在 Step Definition 文件中编写它。确保为每个步骤定义了代码/功能。
这个函数可以是 Java 函数,我们可以在其中使用 Java 和 Selenium 命令来自动化我们的测试步骤。