我们有一个电子邮件报告编写器,用于jenkins的测试套件。它使用常规脚本查找正确的报告,然后制作HTML报告,详细说明测试状态,上次运行,链接等。
hudson.model.Hudson.instance.getItems(hudson.model.FreeStyleProject).each { project -> if(project.name.contains(searchCriteria)){ if(project.lastBuild.testResultAction == null){ tr(){ td(project.name) td(){ b("No Results") } ... } } else{ if(project.lastBuild.testResultAction.failCount > 0){ tr(){ td(project.name) td(){ b(style:'color:red', "FAIL") } ... } } else{ tr(){ td(project.name) td(){ b(style:'color:red', "PASS") } ... } } } } }
通常,一切运行正常,但是最近一两个特定的构建已经开始一致地返回“无结果”,即它们的.testResultAction为null。我已经检查了testResultAction的实际值,尽管它们运行了詹金斯本身可以识别的干净测试,但它的确为空。
测试已经重新运行,詹金斯人的身影被删除并重新制作。都没有帮助。这个问题似乎困扰着某些无关的构建。我应该知道Jenkins中是否存在特定缺陷,该缺陷会导致testResultAction默认为null且不会更改?否则,谁能建议可能导致这种情况发生的原因,或者我如何制止这种情况?
该方法已弃用,并且也给了我null。我在此方面获得了更多成功:
project.lastBuild.getAction(hudson.tasks.test.AggregatedTestResultAction.class)
尽管它可以为null只是因为项目中没有测试。无论如何,这是一种测试结果的方法,对我有用。
def reportOnTestsForBuild(build) { testResultAction = build.getAction(hudson.tasks.test.AggregatedTestResultAction.class); if (testResultAction == null) { println("No tests") return } childReports = testResultAction.getChildReports(); if (childReports == null || childReports.size() == 0) { println("No child reports") return } def failures = [:] childReports.each { report -> def result = report.result; if (result == null) { println("null result from child report") } else if (result.failCount < 1) { println("result has no failures") } else { println("overall fail count: ${result.failCount}") failedTests = result.getFailedTests(); failedTests.each { test -> failures.put(test.fullDisplayName, test) println("Failed test: ${test.fullDisplayName}\n" + "name: ${test.name}\n" + "age: ${test.age}\n" + "failCount: ${test.failCount}\n" + "failedSince: ${test.failedSince}\n" + "errorDetails: ${test.errorDetails}\n") } } } }