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

如何在Jenkins中通过可编辑邮件通知发送含测试结果统计的邮件

当然可以实现这个需求!我之前在维护iOS项目的Jenkins流水线时,刚好做过类似的测试结果提取和邮件通知配置,给你两个实用的方案:

方案1:用Email Extension Plugin + Groovy脚本(最推荐)

这个方案直接利用Jenkins已经解析好的测试结果数据,不需要自己处理XML文件,可靠性最高:

  1. 确保你的Jenkins已经安装了Email Extension Plugin(这是比默认邮件插件功能强很多的工具,几乎是Jenkins邮件通知的标配)
  2. 在构建后操作中添加「Editable Email Notification」配置项
  3. 找到「Default Content」输入框,插入以下Groovy脚本块:
<%
def testResult = build.testResultAction
if (testResult) {
    def passedTests = testResult.passedTests.size()
    def failedTests = testResult.failedTests.size()
    def totalTests = testResult.totalCount
%>
### 测试结果汇总
Tests Passed: ${passedTests}
Tests Failed: ${failedTests}
Total Tests: ${totalTests}
<% } else { %>
⚠️ 未找到测试结果,请检查测试脚本或报告生成配置
<% } %>

这段脚本会自动读取当前构建的测试结果对象,提取通过、失败和总测试用例数,直接渲染到邮件内容里。如果构建没有生成测试结果,还会显示提示信息。

方案2:Shell脚本提取XML数据存入环境变量

如果你的Jenkins环境没有安装Email Extension Plugin,或者需要提前对测试数据做处理,可以用Shell脚本解析xcpretty生成的JUnit格式XML:

  1. 在测试脚本执行完成后,添加一个「Execute shell」构建步骤
  2. 输入以下脚本(记得替换成你的测试报告实际路径):
# 假设xcpretty生成的XML报告路径是 ./build/test-results/junit.xml
TEST_REPORT_PATH="./build/test-results/junit.xml"

# 用xmllint解析XML(需要Jenkins服务器安装libxml2-utils,Debian/Ubuntu可通过apt安装)
FAILED=$(xmllint --xpath 'count(//testcase[failure])' "$TEST_REPORT_PATH")
TOTAL=$(xmllint --xpath 'count(//testcase)' "$TEST_REPORT_PATH")
PASSED=$((TOTAL - FAILED))

# 将结果写入Jenkins环境变量,供后续邮件通知引用
echo "TESTS_PASSED=${PASSED}" >> "${BUILD_ENVIRONMENT}"
echo "TESTS_FAILED=${FAILED}" >> "${BUILD_ENVIRONMENT}"
echo "TESTS_TOTAL=${TOTAL}" >> "${BUILD_ENVIRONMENT}"

如果你的Jenkins服务器没有xmllint,也可以用更轻量的grep+awk组合:

TEST_REPORT_PATH="./build/test-results/junit.xml"
FAILED=$(grep -c "<failure" "$TEST_REPORT_PATH")
TOTAL=$(grep -c "<testcase" "$TEST_REPORT_PATH")
PASSED=$((TOTAL - FAILED))

# 同样写入环境变量
echo "TESTS_PASSED=${PASSED}" >> "${BUILD_ENVIRONMENT}"
echo "TESTS_FAILED=${FAILED}" >> "${BUILD_ENVIRONMENT}"
echo "TESTS_TOTAL=${TOTAL}" >> "${BUILD_ENVIRONMENT}"
  1. 在邮件通知的内容里,直接引用这些环境变量即可,比如:
Tests Passed: ${TESTS_PASSED}
Tests Failed: ${TESTS_FAILED}
Total Tests: ${TESTS_TOTAL}

小提示

xcpretty生成的JUnit XML是标准格式,所以两种方案都能稳定工作。个人更推荐方案1,因为Jenkins会自动处理测试报告的解析,不用关心XML结构的细节,后续如果测试报告格式有变化,也不需要修改脚本。

内容的提问来源于stack exchange,提问作者punk_fusion92

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:49:06