如何在Jenkins构建邮件中添加失败测试的详细信息
嗨,我来帮你搞定这个问题!你目前用的${FAILED_TESTS}变量只能返回简洁的失败摘要,要是想在邮件里直接看到完整的错误栈信息,不用跳控制台,可以按下面的方法配置:
第一步:确保安装邮件扩展插件(Email Extension Plugin)
默认的Jenkins邮件功能比较有限,得先装这个插件才行。你可以去「Manage Jenkins > Plugins」里搜索“Email Extension Plugin”,找到后安装并重启Jenkins。
第二步:替换邮件内容里的变量或用自定义脚本
这里有两种实用的方式:
方式一:用插件内置的详细变量
直接把邮件里的${FAILED_TESTS}换成${FAILED_TESTS_DETAILED}就行!这个变量会自动输出包含完整错误栈的详细测试失败信息。调整后的邮件内容可以写成这样:
Check console output at $BUILD_URL to view the results
失败测试详情:
${FAILED_TESTS_DETAILED}
方式二:用Groovy脚本自定义展示格式
要是你想更灵活地控制展示的内容(比如分模块显示测试类、方法名、错误信息),可以用Groovy脚本自定义:
在构建任务的「Post-build Actions」里选择「Editable Email Notification」,然后在邮件内容区域插入以下脚本:
<% def failedTestAction = manager.build.getAction(hudson.tasks.test.AbstractTestResultAction.class) if (failedTestAction != null && failedTestAction.failedTests.size() > 0) { out.println("### 失败测试详细报告 ###") failedTestAction.failedTests.each { testCase -> out.println("#### 测试类:${testCase.fullName}") out.println("##### 失败方法:${testCase.name}") out.println("##### 错误描述:${testCase.errorDetails}") out.println("##### 完整栈跟踪:") out.println("```java") out.println(testCase.errorStackTrace) out.println("```") out.println("---") } } else { out.println("本次构建无失败测试") } %>
这个脚本会遍历所有失败的测试用例,把每个用例的类名、方法名、错误信息和完整栈跟踪都清晰地展示出来。
第三步:测试验证
跑一次包含失败测试的构建,看看收到的邮件里是不是已经直接显示了详细的失败信息啦~
如果是用Pipeline任务的话,语法会稍有不同,你可以通过currentBuild.rawBuild.getAction(...)来获取测试结果,再构建邮件内容哦!
内容的提问来源于stack exchange,提问作者Xin Liu

