0
点赞
收藏
分享

微信扫一扫

第5章 Cucumber的Tags

5.1 Cucumber Tags

         看起来很简单,当我们只有一个,两个,或可能五个场景在功能文件。然而,在现实生活中它不会发生。对于每个被测试的特性,我们在单个特性文件中可能有10,20或更多数量的场景。它们可能代表不同的目的(烟雾测试/回归测试),不同的前景(开发人员/ QA / BA),不同的状态(准备执行/正在进行中)等。

         为此,Cucumber已经提供了一种通过使用特征文件中的标记来组织场景执行的方法。可以用一个有用的标签来定义每个场景。稍后,在runner文件中,可以决定想要Cucumber执行哪个特定标签(以及场景)。标签以“@”开头。在“@”之后,可以使用任何相关文字来定义代码。用一个例子来理解这个。

5.2 Cucumber Tags操作实例

         假设,feature文件中有两个或多个方案。但是只想执行一个场景作为烟雾测试的一部分。因此,第一件事是识别该场景,其次是在场景开始处用“@SmokeTest”文本标记它。

         在文件中写入以下文本并保存。 此功能文件包含两个方案,其中只有一个已标记为SmokeTest标记。

         Step_1:在/src/test/java路径下创建一个cucumberTag包。

         Step_2:在cucumber包下创建cucumberTag.feature           

Feature: Cucumber Tag 
Scenario Outline: Login functionality for a social networking site.
Given user navigates to csdn
When I enter Username as "<username>" and Password as "<password>"
Then login should be unsuccessful
Examples:
|username |password |
|username1 |password1 |
|username2 |password2 |

#following scenario has been tagged as SmokeTest and this should get executed.
@SmokeTest
Scenario:
Given user navigates to csdn
When I enter Username as "<>" and Password as "<>"
Then the user should be redirected to login retry

第5章 Cucumber的Tags_tag在feature级别定义

         Step_3:在cucumber包下创建步骤定义文件cucumberTag.java       


package cucumberTag; 
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
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 csdn$")
public void goToCsdn() {
driver = new ChromeDriver();
driver.navigate().to(");
}

@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("username")).sendKeys(arg1);
driver.findElement(By.id("password")).sendKeys(arg2);
driver.findElement(By.className("logging")).click();
}

@Then("^login should be unsuccessful$")
public void validateRelogin() {
if(driver.getCurrentUrl().equalsIgnoreCase
System.out.println("Test Pass");
}
else {
System.out.println("Test Failed");
}
driver.close();
}

@Then("^the user should be redirected to login retry$")
public void loginRetry() {
if(driver.getCurrentUrl().equalsIgnoreCase
System.out.println("Test Pass");
}
else {
System.out.println("Test Failed");
}
driver.close();
}
}

       Step_4:在cucumber包下创建runner类文件,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 {

}

     第5章 Cucumber的Tags_tag在feature级别定义_02   

Step_5:运行test的选项:进入左侧包浏览,选择runTest.java,右击选择“Run as”,在弹出框选择“JUnit test”。运行结果如下:

         第5章 Cucumber的Tags_tag在feature级别定义_03

       这有两个主要类型的Tag:

Ø  Default tag:Default tag需要预定义。例如:@Dev、@Ignore

Ø  Custom tag:Custom tag很灵活,用户可以选择适当的文字定义自己的tag

         tag也可以在feature级别定义。在feature级别定义tag后,它将确保该feature文件中的所有场景都继承该tag。根据场景的性质,可以为单个feature使用多个tag。每当Cucumber找到适当的调用时,将执行特定的场景。

         Cucumber还提供了一种逆向选择tag的方法。试想下在25个定义的场景中,10个被标记为smoketest。我们只需要执行回归测试场景。

         为此,我们可以在JUnit runner类中使用“~”来排除smoke test场景。 它将如下所示:        


package cucumberTag; 
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(format={"pretty", "html:target/cucumber"},tags={"~@SmokeTest"})
public class runTest {

}

在定义多个tag时,我们还可以定义逻辑or和逻辑and操作。

Ø  定义逻辑or在runner类中 - @ dev,@wip:它说,匹配包含其中任意标记需要执行的场景。

Ø  定义逻辑and在runner类中 - [@ dev,〜@ wip]:它说,匹配包含这两个标签需要执行的场景。


举报

相关推荐

0 条评论