📅  最后修改于: 2020-12-07 04:50:46             🧑  作者: Mango
当功能文件中只有一个,两个或五个场景时,这看起来很简单。但是,在现实生活中并不会发生。对于每个要测试的功能,单个功能文件中可能有10个,20个或更多场景。它们可能代表不同的目的(烟雾测试/回归测试),不同的预期对象(开发人员/ QA / BA),不同的状态(准备执行/正在进行中)等。如何管理如此大规模的执行?
为此,Cucumber已经提供了一种使用功能文件中的标签来组织方案执行的方法。我们可以使用有用的标签定义每个方案。稍后,在运行程序文件中,我们可以确定希望Cucumber执行的特定标签(以及场景)。标签以“ @”开头。在“ @”之后,您可以使用任何相关文本来定义标签。让我们通过一个例子来理解这一点。
假设功能文件中有两个或更多场景。我们只想执行一种方案作为烟雾测试的一部分。因此,第一件事是识别该方案,其次是在方案开始时用“ @SmokeTest”文本标记它。让我们深入了解一下-
第1步-创建命名为cucumberTag Maven项目。
第2步-在src / test / java下创建一个名为CucumingTag的包
步骤3-创建一个名为cucumberTag.feature的功能文件。
在文件中写入以下文本并保存。此功能文件包含两种情况,其中只有一种被标记为SmokeTest标签。
功能-黄瓜标签
方案大纲-社交网站的登录功能。
给定用户导航到Facebook
当我输入用户名作为“ <用户名>”和密码作为“ <密码>”时
然后登录应该失败
| username | password |
| username1 | password1 |
| username2 | password2 |
#following场景已被标记为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 Web浏览器实例中打开。
用户名和密码字段将不会提供任何值。
单击登录。
登录重试页面将被加载。
在功能文件中定义标签没有限制。根据您的需要,您可以派生要使用的标签和要执行的方案。
标签主要有两种类型-
默认标签-默认标签具有其预定义的含义。示例@ Dev,@ Ignore
自定义标签-自定义标签为您提供了充分的灵活性,可以选择适当的文本来定义标签。
标签也可以在功能级别定义。在功能级别定义标签后,它可以确保该功能文件中的所有方案都继承该标签。根据场景的性质,我们可以为单个功能使用多个标签。只要Cucumber找到合适的呼叫,就会执行特定的方案。
黄瓜还提供了一种反转标签选择的方法。考虑在25个已定义的方案中,有10个被标记为烟雾测试。我们只需要执行回归测试方案。
为此,我们可以在JUnit运行器类中使用“〜”来排除冒烟测试方案。它将如下所示。
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"}, tags = {"~@SmokeTest"})
public class runTest { }
在定义多个标签时,我们还可以定义逻辑或/和逻辑与操作。
定义逻辑类或运行器类- @ dev,@ wip-它表示需要执行与任何此标记匹配的方案。
定义逻辑类或运行器类- [@ dev,〜@ wip]-表示需要同时匹配这两个标记的方案。