You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 04:25:31