Maven构建及执行clean test时TestNG测试未运行该如何配置?
问题解决方案
问题根因
你遇到的测试不执行问题主要由两个原因导致:
- maven-surefire-plugin没有显式配置TestNG执行器,且项目同时引入了JUnit Jupiter和TestNG依赖,插件默认优先匹配JUnit执行逻辑,无法识别TestNG注解的测试用例
- 测试代码混合使用了JUnit和TestNG的注解,两种框架注解互不兼容,会导致测试用例识别异常
修复步骤
1. 调整maven-surefire-plugin配置
修改pom.xml中maven-surefire-plugin的配置,显式指定使用TestNG执行测试,配置示例如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M5</version> <configuration> <!-- 显式指定TestNG作为测试执行引擎 --> <testNGArtifactName>org.testng:testng</testNGArtifactName> <!-- 如果有自定义testng.xml套件配置,可以放开下面的配置指定文件路径 --> <!-- <suiteXmlFiles> <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile> </suiteXmlFiles> --> <!-- 按需指定要执行的测试组,比如只执行multiple_runs组的测试 --> <!-- <groups>multiple_runs</groups> --> </configuration> <dependencies> <!-- 引入TestNG专属的surefire执行器 --> <dependency> <groupId>org.apache.maven.surefire</groupId> <artifactId>surefire-testng</artifactId> <version>3.0.0-M5</version> </dependency> </dependencies> </plugin>
2. 统一测试框架注解
你当前的测试代码混用了JUnit Jupiter和TestNG的注解,需要把JUnit的注解替换为TestNG对应的实现:
| 原JUnit注解 | 替换为TestNG对应配置 |
|---|---|
@org.junit.jupiter.api.Tag | 合并到@org.testng.annotations.Test的groups属性中 |
@org.junit.jupiter.api.Order | 替换为@org.testng.annotations.Test的priority属性 |
@org.junit.jupiter.api.Timeout | 替换为@org.testng.annotations.Test的timeOut属性(单位为毫秒) |
修改后的测试方法注解示例:
@Test( testName = "52333 Mobile Web - Reload a page to refresh it", groups = { "multiple_runs", "description" }, priority = 1, timeOut = 80000 ) public void Mobile_Web_Reload_a_page_to_refresh_it_52333() throws InterruptedException { // 测试逻辑不变 }
3. 验证路径配置
确认所有TestNG测试类都放在src/test/java目录下,类名符合surefire默认的测试类匹配规则(默认匹配**/*Test.java命名格式的类,你当前的ReloadPageTest符合要求)。
配置完成后执行mvn clean test命令即可正常触发TestNG测试执行。
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

