标记用例tag
- 通过 Tag 对用例分组:
- 环境分组: 测试环境、预发布环境
- 阶段分组: 冒烟用例
- 版本分组: V1.1、V1.2
- 设置标签
- 根据标签执行
- 结合 Maven 执行
- 结合测试套件执行
import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; public class TagExampleTest { @Tag("preprod") @Test void test1(){ System.out.println("预生产环境"); } @Tag("test") @Test void test2(){ System.out.println("测试环境"); } @Tag("dev") @Test void test3(){ System.out.println("开发环境"); } @Tag("dev") @Tag("test") @Test void test4(){ System.out.println("开发+测试环境"); } }
Maven 结合 tag 构建-修改 pom 文件
groups
表示执行包含标签或者标签表达式的用例。excludedGroups
表示不执行包含该标签或者标签表达式的用例。- 使用命令
mvn clean test
执行用例
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.2</version> <configuration> <!-- 要执行的标签 --> <groups>test</groups> <!-- 不要执行的标签 --> <excludedGroups>dev</excludedGroups> </configuration> </plugin> </plugins> </build>
- 注意: 如果使用命令行的同时也配置了 pom 文件, pom 的配置优先级更高
# 执行 test 标签的用例 mvn clean test -Dgroups="test"
# 执行不含test 标签的用例 mvn clean test -DexcludedGroups="test"
Tags 的命名规范
- 不准为空。
- 标签不得包含空格。
- 标签不得包含 ISO 控制字符。
- 标签不得包含以下任何保留字符
,
(
、)
&
|
!
Tag 表达式
Tag 表达式 | 含义 | 示例 |
---|---|---|
& |
表示 与 关系 | test1&test2 表示执行既包含test1又包含test2的标签 |
! |
表示 非 关系 | !test 表示执行没有test1标签的用例 |
| |
表示 或 关系 | test1|test2 表示执行包含test1或包含test2的标签 |
在pom中配置使用
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <!-- & 在xml 中表示 & 与的关系 --> <groups>test&dev</groups> <!-- 不要执行的标签 --> <!-- <excludedGroups>主流程方法</excludedGroups>--> </configuration> <version>2.22.2</version> </plugin>
# 执行 没有test 标签的用例
mvn clean test -Dgroups="!test"
# 执行 dev 或 test 标签的用例
mvn clean test -Dgroups="dev|test"
# 执行既有 dev 也有 test 标签的用例
mvn clean test -Dgroups="dev&test"
自定义标签
如果需要设置 Tag 的地方比较多,代码会显得比较冗余
解决方案: 直接使用自定义的标签做注解
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; //定义标签 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Tag("Preprod") @Test public @interface PreprodTest { }
使用自定义标签
使用 mvn clean test 执行
import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; //设置自定义Tag后使用mvn clean test 执行 class TagExampleTest { @CustomTagTest void testCustomTag(){ System.out.println("自定义的标签"); } void testCustomTag2(){ System.out.println("无自定义标签"); } }