启用Surefire rerunFailingTestsCount后,如何配置Jenkins CI展示Flaky测试数据?
没问题!既然你已经启用了Surefire的rerunFailingTestsCount功能,下面我就一步步带你配置Jenkins,让它能完美展示这些测试数据,帮你轻松监控Flaky测试、区分不同状态的构建:
1. 先确保Jenkins插件支持Flaky测试识别
首先要保证你的Jenkins安装了正确的插件,并且是最新版本:
- JUnit Plugin:这是核心插件,新版本(2.100+以上)已经支持识别Surefire扩展的JUnit XML里的Flaky测试标记——也就是那些重跑后成功的测试,会被自动归类为FLAKY。
- Test Stability Plugin(可选但推荐):专门用来统计Flaky测试的稳定性趋势,帮你找出最容易出问题的测试。
- Conditional Buildstep Plugin(针对Freestyle项目):用来根据测试结果自定义构建状态。
2. 配置测试报告解析
不管你是Freestyle还是Pipeline项目,第一步都是让Jenkins正确解析Surefire生成的测试报告:
- Freestyle项目:进入项目配置页,找到「构建后操作」,添加「Publish JUnit test result report」,然后在「Test report XMLs」里填入路径,比如
**/target/surefire-reports/*.xml。 - Pipeline项目:在Jenkinsfile里加入这段代码来解析报告:
junit testResults: '**/target/surefire-reports/*.xml', allowEmptyResults: true
配置完成后,Jenkins的测试报告页面会自动新增一个「Flaky Tests」标签页,里面会列出所有重跑后成功的不稳定测试,以及它们的重跑历史。
3. 区分构建状态:Flaky/失败/全通过
默认情况下,Jenkins会把Flaky测试当成通过的测试,导致含Flaky测试的构建和全通过的构建状态一样,这显然不是你想要的。我们可以自定义构建状态:
针对Freestyle项目
- 安装好
Conditional Buildstep Plugin后,在「构建后操作」里添加「Conditional steps (multiple)」。 - 添加第一个条件:
- 条件选择「Test Result」,设置为「至少有一个失败的测试用例」。
- 执行步骤选择「Set build result」,设置为「FAILURE」。
- 添加第二个条件:
- 条件选择「Test Result」,设置为「没有失败的测试用例,但至少有一个不稳定的测试用例」。
- 执行步骤选择「Set build result」,设置为「UNSTABLE」。
- 最后,默认情况下全通过的构建会保持「SUCCESS」状态。
针对Pipeline项目
直接在Jenkinsfile里用脚本判断测试结果:
// 先解析测试报告 junit testResults: '**/target/surefire-reports/*.xml', allowEmptyResults: true // 获取测试结果对象 def testResultAction = currentBuild.rawBuild.getAction(hudson.tasks.junit.TestResultAction.class) def hasFailedTests = testResultAction?.failCount > 0 def hasFlakyTests = testResultAction?.getFlakyTests()?.size() > 0 // 设置构建状态 if (hasFailedTests) { currentBuild.result = 'FAILURE' } else if (hasFlakyTests) { currentBuild.result = 'UNSTABLE' } else { currentBuild.result = 'SUCCESS' }
这样配置后,三种构建状态就清晰区分开了:
- 红色FAILURE:有真正失败的测试(重跑后还是失败)
- 黄色UNSTABLE:只有Flaky测试(重跑后成功)
- 蓝色SUCCESS:所有测试一次通过
4. 监控Flaky测试,优先修复拖慢构建的测试
要找出那些频繁重跑、拖慢构建的测试,可以用这些方法:
- JUnit报告的Flaky标签页:直接查看每个Flaky测试的重跑次数、成功率,一目了然哪些测试最不稳定。
- Test Stability Plugin:安装后,项目页面会新增「Test Stability」标签,生成可视化的报表,展示每个测试的稳定性趋势(比如近10次构建中失败/重跑的次数),帮你快速定位优先级最高的修复对象。
- Dashboard View:创建一个Jenkins仪表盘,添加「Test Result Trend」组件,展示全局或特定项目的Flaky测试数量变化趋势,方便长期监控。
5. 小技巧:减少Flaky测试对构建速度的影响
既然Flaky测试会重复运行拖慢构建,除了修复它们,还可以:
- 在Surefire配置里,限制重跑次数(比如
rerunFailingTestsCount=2),避免无限重跑。 - 用Jenkins的「Test Filter」插件,暂时跳过那些极其频繁Flaky的测试,先保证构建速度,再慢慢修复。
这样配置下来,你就能完全掌控测试数据,轻松区分不同状态的构建,并且快速定位需要优先处理的Flaky测试啦!
内容的提问来源于stack exchange,提问作者user7610
相关产品推荐
相关产品推荐

