如何在Jenkins中通过可编辑邮件通知发送含测试结果统计的邮件
当然可以实现这个需求!我之前在维护iOS项目的Jenkins流水线时,刚好做过类似的测试结果提取和邮件通知配置,给你两个实用的方案:
方案1:用Email Extension Plugin + Groovy脚本(最推荐)
这个方案直接利用Jenkins已经解析好的测试结果数据,不需要自己处理XML文件,可靠性最高:
- 确保你的Jenkins已经安装了Email Extension Plugin(这是比默认邮件插件功能强很多的工具,几乎是Jenkins邮件通知的标配)
- 在构建后操作中添加「Editable Email Notification」配置项
- 找到「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:
- 在测试脚本执行完成后,添加一个「Execute shell」构建步骤
- 输入以下脚本(记得替换成你的测试报告实际路径):
# 假设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}"
- 在邮件通知的内容里,直接引用这些环境变量即可,比如:
Tests Passed: ${TESTS_PASSED} Tests Failed: ${TESTS_FAILED} Total Tests: ${TESTS_TOTAL}
小提示
xcpretty生成的JUnit XML是标准格式,所以两种方案都能稳定工作。个人更推荐方案1,因为Jenkins会自动处理测试报告的解析,不用关心XML结构的细节,后续如果测试报告格式有变化,也不需要修改脚本。
内容的提问来源于stack exchange,提问作者punk_fusion92
相关产品推荐
相关产品推荐

