如何配置Jenkins任务在Slack通知中展示通过与失败测试用例
配置Jenkins Slack通知展示测试用例详情(含百分比与颜色格式)
1. 安装必备插件
确保Jenkins已安装以下插件:
- Slack Notification Plugin:负责与Slack通信
- JUnit Plugin:解析JUnit格式的测试报告(多数主流测试框架支持输出该格式)
- Groovy Postbuild Plugin(可选,用于实现更灵活的自定义消息逻辑)
2. 配置Slack全局连接
进入Jenkins 全局系统配置,找到Slack配置区域:
- 填入Slack工作区的Webhook URL、Bot User OAuth Token
- 设置默认通知频道(单个任务中可按需覆盖)
- 点击测试连接,确认配置有效
3. 任务中启用测试报告解析
在目标Jenkins任务的构建后操作中添加「Publish JUnit test result report」:
- 指定测试报告路径:Maven项目填
**/target/surefire-reports/*.xml,Gradle项目填**/build/test-results/test/*.xml - 保存配置,确保Jenkins能正确抓取测试用例数据
4. 自定义Slack通知内容(两种实现方式)
方式一:用Slack Notification Plugin自带模板
在任务的构建后操作中添加「Slack Notifications」:
- 勾选「Send Custom Message」
- 在「Custom Slack message」中填入以下模板(支持Jenkins内置变量):
*构建 ${BUILD_NUMBER} 测试结果* > 总用例数: ${TEST_COUNTS,var="total"} | 通过: ${TEST_COUNTS,var="pass"} (${TEST_COUNTS,var="passPercent"}%) | 失败: ${TEST_COUNTS,var="fail"} (${TEST_COUNTS,var="failPercent"}%) {{#TEST_FAILURES}} *失败用例详情:* {{#each this}} > • {{name}}: {{error}} {{/each}} {{/TEST_FAILURES}}
- 在「Color」字段中设置动态颜色:
(红色代表存在失败用例,绿色代表全部通过)${TEST_COUNTS,var="fail"} > 0 ? "#dc3545" : "#36a64f"
方式二:用Groovy脚本实现灵活控制
如果需要更复杂的逻辑(比如过滤特定失败用例、添加额外统计项),使用Groovy Postbuild插件:
在任务的构建后操作中添加「Execute Groovy postbuild」,填入以下脚本:
// 获取测试结果数据 def testResult = manager.build.testResultAction if (!testResult) { slackSend channel: '#your-channel', message: "⚠️ 本次构建未生成测试报告" return } def totalCases = testResult.totalCount def passedCases = testResult.passCount def failedCases = testResult.failCount def skippedCases = testResult.skipCount // 计算百分比(避免除零错误) def passPercent = totalCases > 0 ? Math.round((passedCases / totalCases) * 100) : 0 def failPercent = totalCases > 0 ? Math.round((failedCases / totalCases) * 100) : 0 // 构建消息内容 def messageContent = """ *构建 ${manager.build.number} 测试结果汇总* > 总用例: ${totalCases} | 通过: ${passedCases} (${passPercent}%) | 失败: ${failedCases} (${failPercent}%) | 跳过: ${skippedCases} """ // 添加失败用例详情 if (failedCases > 0) { messageContent += "\n*失败用例列表:*\n" testResult.failedTests.each { test -> messageContent += "> • ${test.fullName}: ${test.errorDetails.split('\n')[0]}\n" } } // 发送到Slack,根据失败情况设置颜色 def slackColor = failedCases > 0 ? "#dc3545" : "#36a64f" slackSend channel: '#your-channel', color: slackColor, message: messageContent
- 替换
#your-channel为实际的Slack频道名 - 脚本中
test.errorDetails.split('\n')[0]用于只显示错误信息的第一行,避免消息过长
5. 测试验证
手动触发一次任务构建,检查Slack频道是否收到符合预期的通知:
- 确认百分比计算准确
- 失败用例详情清晰展示
- 颜色根据测试结果动态切换
内容的提问来源于stack exchange,提问作者android work
相关产品推荐
相关产品推荐

