行为驱动:Cucumber + Selenium + Java (三) - 使用标签实现测试分组

在上一篇中,我们写出了 Selenium + Cucumber + Java 环境下的第一个 BDD 自动化测试用例,这一篇我们说说怎么用标签对用例进行分组。

3.1 Cucumber 标签

  实际工作中,我们的自动化用例库可能会变得非常庞大。如果只是按照先前的方式去执行,则每一次都会执行全部用例,真实使用时这是不现实的。

  Cucumber 给我们提供一种用标签来组织自动化用例的办法,通过分别在 feature 和 scenario 级别上定义一个或多个标签,然后再在 runner 类里定义要执行的标签情况,就可以达到测试分组的目的。

  标签以“@”开头。在“@”之后,可以使用任何相关文字来定义标签。

  根据实际的工作场景,我们可以定义出各种各样的标签,因为标签的起名是自由的,比如:

  根据测试活动的不同可以定义:@SanityTest @RegressionTest @FunctionalTest

  根据测试用例的不同优先级可以定义:@P1 @P2 @P3

  根据测试的功能模块来定义:@UserManagement @ProductDetail @CheckOutFlow

  等等等等,以上的标签名字都是自定义的。很好理解,比如打了@SanityTest 标签的用例,就是一个做完整性测试的用例。

  一个 feature 或者 scenario 都可以有多个标签,而由于 scenario 和 feature 之间又有一定的从属关系,可以理解为 feature 所拥有的标签都会被他内部的 scenario 继承。

3.2 Cucumber 标签实例

  我们在 features 文件夹下面,新建一个叫 TestTags.feature 的文件。

  文件里写入以下 gherkin 代码: 

@AddToBasket

Feature: Test JD add item into basket

Description

@JD @SanityTest @FunctionalTest @P1

Scenario: Add first product into basket from PDP

Given I navigate to JD site

When I search for a keyword

And I pick the first item from PLP

And I add that particular item into basket

Then That particular item is added

@JD @FunctionalTest @P2

Scenario: Add secondary product into basket from PDP

Given I navigate to JD site

When I search for a keyword

And I pick the second item from PLP

And I add that particular item into basket

Then That particular item is added

  在这个特性文件里,我们定义了一个特性,包括两个场景。可以看到 Feature 这个层级有一个@AddToBasket 的标签,而场景 1 和 2 之间的区别是,场景 1 属于@SanityTest 并且优先级为@P1。

3.3 通过 runner 类实现分组执行

  接下来只需要在 runner 类中,将标签进行一个选择就可以了。

  比如,我们想要让有@SanityTest 标签的用例进行执行,那么我们的 runner 类应该如下编写:

package CucumberRunner;

import org.junit.runner.RunWith;

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(features="Features",glue="stepDefinitions",tags="@SanityTest")

public class CucumberRunner {    
    
}

  我们再通过这个 runner 类去执行 cucumber 用例的时候,就会只执行有相应标签的 scenario。

  Runner 类中选择标签也是可以多选,而且还可以选择排除某些标签。

  比如说,tags="@SanityTest, @P1"就是执行所有拥有这两个标签的用例。(注意这里是‘或’关系)。

  又比如,tags="@FunctionalTest, ~@P2"就是执行所有 FunctionalTest 并且不为 P2 的用例。~符号表示排除某个标签。

  

  到此为止,通过对 features 和 scenario 打标签,然后通过 runner 选择标签去执行,我们就可以实现测试分组的目的。

  下一篇我们来实现 cucumber 用例的参数化。

回帖
请输入回帖内容 ...