- Cucumber 教程
- Cucumber - 首页
- Cucumber - 概述
- Cucumber - 环境
- Cucumber - Gherkin
- Cucumber - 特性
- Cucumber - 场景
- Cucumber - 注解
- Cucumber - 场景大纲
- Cucumber - 标签
- Cucumber - 数据表
- Cucumber - 注释
- Cucumber - Hook
- Cucumber - 命令行选项
- Cucumber - JUnit 运行器
- Cucumber - 报告
- Cucumber - 调试
- Cucumber - Java 测试
- Cucumber - Ruby 测试
- Cucumber 有用资源
- Cucumber - 快速指南
- Cucumber - 有用资源
- Cucumber - 讨论
Cucumber - 标签
如果一个特性文件中只有一个、两个或五个场景,看起来很简单。然而,在现实生活中并非如此。对于每个被测试的特性,我们可能在一个特性文件中拥有10个、20个甚至更多的场景。它们可能代表不同的目的(冒烟测试/回归测试)、不同的视角(开发人员/QA/业务分析师)、不同的状态(准备执行/进行中)等等。如何管理如此大量的执行?
为此,Cucumber已经提供了一种方法,可以使用特性文件中的标签来组织场景的执行。我们可以用一个有用的标签定义每个场景。稍后,在运行器文件中,我们可以决定Cucumber要执行哪些特定的标签(以及相应的场景)。标签以“@”开头。“@”之后可以有任何相关的文本定义你的标签。让我们用一个例子来理解这一点。
假设,一个特性文件中存在两个或多个场景。我们想只执行一个场景作为冒烟测试的一部分。所以第一步是识别该场景,第二步是在场景的开头用“@SmokeTest”文本标记它。让我们仔细看看它——
步骤 1 - 创建一个名为cucumberTag的Maven项目。
步骤 2 - 在src/test/java下创建一个名为cucumberTag的包。
步骤 3 - 创建一个名为cucumberTag.feature的特性文件。
在文件中写入以下文本并保存。此特性文件包含两个场景,其中只有一个被标记为SmokeTest标签。
特性 - Cucumber 标签
场景大纲 - 社交网站登录功能。
给定用户导航到Facebook
当我输入用户名为"<username>"和密码为"<password>"
则登录应失败
示例
| username | password | | username1 | password1 | | username2 | password2 |
#以下场景被标记为SmokeTest,这应该被执行。@SmokeTest
场景
给定用户导航到Facebook
当我输入用户名为"<>"和密码为"<>"
则用户应被重定向到登录重试
步骤 4 - 创建一个步骤定义文件。
选择并右键单击包大纲。
单击“新建”文件。
给文件命名为cucumberTag.java
在文件中写入以下文本并保存。
package cucumberTag; 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 cucumberTag { 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(); } @Then("^User should be redirected to login retry$") public void loginRetry() { 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(); } }
步骤 5 - 创建一个运行器类文件。
在包内创建一个名为runTest.java的运行器类。
编写以下代码。
保存文件。
package cucumberTag; import org.junit.runner.RunWith; import cucumber.junit.Cucumber; @RunWith(Cucumber.class) @Cucumber.Options(format = {"pretty", "html:target/cucumber"}) public class runTest { }
运行测试选项。
右键单击并选择“运行方式”选项。
选择JUnit测试。
运行此类文件时,您将观察到以下情况。
Facebook在一个新的Firefox网页浏览器实例中打开。
不会为用户名和密码字段提供任何值。
将点击登录。
将加载登录重试页面。
在特性文件中定义标签没有限制。根据您的需要,您可以派生要使用的标签和要执行的场景。
主要有两种类型的标签:
默认标签 - 默认标签具有预定义的含义。例如@Dev,@Ignore
自定义标签 - 自定义标签提供完整的灵活性,您可以选择合适的文本定义您的标签。
标签也可以在特性级别定义。一旦你在特性级别定义了一个标签,它就确保该特性文件中的所有场景都继承该标签。根据场景的性质,我们可以为单个特性使用多个标签。每当Cucumber找到合适的调用时,将执行特定的场景。
Cucumber还提供了一种反转标签选择的方法。假设在25个已定义的场景中,有10个被标记为冒烟测试。我们需要仅执行回归测试场景。
为此,我们可以在JUnit运行器类中使用“~”来排除冒烟测试场景。它看起来如下所示。
@RunWith(Cucumber.class) @Cucumber.Options(format = {"pretty", "html:target/cucumber"}, tags = {"~@SmokeTest"}) public class runTest { }
在定义多个标签时,我们还可以定义逻辑或/和逻辑与运算。
在运行器类中定义逻辑或 - @dev,@wip - 这表示需要执行匹配任何此标签的场景。
在运行器类中定义逻辑与 - [@dev,~@wip] - 这表示需要执行匹配这两个标签的场景。