如何配置Maven Failsafe插件仅运行测试套件而非重复执行套件与单个集成测试用例
如何配置Maven Failsafe插件仅运行测试套件而非重复执行套件与单个集成测试用例
看起来你遇到了Maven Failsafe插件重复执行集成测试的问题——既跑了单个IT测试类,又跑了测试套件,导致测试重复执行,而且顺序也不符合你在套件里定义的预期。别担心,咱们一步步来解决这个问题:
问题根源分析
首先,问题出在Failsafe插件的默认匹配规则上:它会自动扫描所有符合**/IT*.java的类。你的单个测试用例(比如DepartementsITCase.java)和测试套件(CogSuiteIT.java)都满足这个命名规则,所以插件会同时执行单个测试类和套件;而套件内部又会按你定义的顺序再执行一遍单个测试,自然就出现了重复执行的情况。同时,单个测试的执行顺序是Maven默认的类加载顺序,和你在套件里指定的顺序不一致,这就是为什么顺序乱了。
解决方案:精准控制Failsafe的测试扫描范围
我们需要调整Failsafe插件的配置,让它只执行测试套件类,同时排除单个IT测试用例,这样就能保证测试只按套件定义的顺序执行一次。
修改你assemblage profile中的maven-failsafe-plugin配置:
<profile> <id>assemblage</id> <properties> <skip.integration.tests>false</skip.integration.tests> <skip.unit.tests>false</skip.unit.tests> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <configuration> <skipTests>${skip.integration.tests}</skipTests> <!-- 仅匹配测试套件类(你的套件命名为*SuiteIT.java) --> <includes> <include>**/*SuiteIT.java</include> </includes> <!-- 排除单个集成测试用例,避免重复执行 --> <excludes> <exclude>**/*ITCase.java</exclude> </excludes> </configuration> <!-- 显式绑定插件执行阶段,确保集成测试在正确时机运行 --> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile>
额外说明
- 针对无套件的模块:如果你的部分模块没有测试套件,只有单个IT测试用例,你可以针对这些模块单独调整Failsafe配置,比如移除
excludes规则,或者给这类模块单独设置profile。 - 确认Surefire配置:你当前的
maven-surefire-plugin配置已经排除了**/IT*.java,这个是正确的——单元测试插件不应该执行集成测试类,保持这个配置即可。
验证效果
修改完成后,再次执行命令:
mvn install -Passemblage | grep -F 'IT' | grep -F 'Tests run'
你应该只会看到测试套件CogSuiteIT的执行日志,且测试顺序完全符合你在@SelectClasses中定义的顺序,单个IT测试类不会被重复执行了。
内容来源于stack exchange
相关产品推荐
相关产品推荐

