如何重跑JUnit5失败用例且不在测试结果中上报初始失败?
最优方案:使用Gradle Test Retry插件原生配置(零代码侵入)
Gradle官方的Test Retry插件本身就支持自动清理重试成功用例的初始失败记录,不需要任何测试代码修改,仅需调整构建配置即可满足需求:
- 确认你使用的Test Retry插件版本≥1.2.0
- 在
build.gradle中添加以下配置:
test { retry { // 最多重试2次失败用例,可按需调整 maxRetries = 2 // 仅针对外部服务相关异常重试,可按需调整匹配规则 retryOnException = true retryOn(exceptions = [IOException::class, RuntimeException::class]) // 核心配置:重试成功后自动删除初始失败记录,不会写入最终测试结果 removeFailuresFromRetriedTests = true } }
配置生效后,只要失败用例在重试次数内通过,最终生成的JUnit XML报告里不会存在任何失败记录,Jenkins读取到的测试结果就是全部通过,直接标记构建为成功。
备选方案:JUnit5全局重试扩展(适合需要自定义重试逻辑的场景)
如果你需要在测试框架层实现更灵活的重试规则(比如按异常信息匹配、按用例标签重试等),不需要修改现有@Test注解,也不需要逐个类加扩展引用,使用JUnit5的自动扩展注册机制即可全局生效:
- 自定义重试扩展类,实现
InvocationInterceptor和TestExecutionExceptionHandler接口,核心逻辑为:捕获测试方法抛出的指定异常后重试,只要任意一次重试成功就正常返回,所有重试失败才向上抛出异常标记用例失败。 - 在测试资源目录下新建
src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension文件,写入你自定义的重试扩展类的全限定类名,JUnit5会自动扫描并全局加载该扩展。
该方案完全不需要修改现有测试用例的代码,即可对所有@Test方法生效。
内容的提问来源于stack exchange,提问作者domagile
相关产品推荐
相关产品推荐

