使用管道和常规,如何从Jenkins中提取我当前构建的测试结果?

Mik*_*ury 7 jenkins jenkins-pipeline

我有一个用在Pipeline构建下运行的Groovy编写的相当完整的构建过程,包括运行单元测试并使用JUnitResultArchiver将测试结果报告给Jenkins.

鉴于Jenkins已经为我解析了这个XML并且有测试结果,我想在构建结束时提取任何和所有测试用例以包含在电子邮件中.

试图与testResultAction进行交互我最终得到了未分类的方法错误.

任何帮助或示例将不胜感激!

Mik*_*ury 10

结束了整理.这是我写的功能,随时调整以满足您的需求:

@NonCPS
def reportOnTestsForBuild() {
  def build = manager.build
  println("Build Number: ${build.number}")
  if (build.getAction(hudson.tasks.junit.TestResultAction.class) == null) {
    println("No tests")
    return ("No Tests")
  }

  // The string that will contain our report.
  String emailReport;

  emailReport = "URL: ${env.BUILD_URL}\n"

  def testResults =    build.getAction(hudson.tasks.junit.TestResultAction.class).getFailCount();
  def failed = build.getAction(hudson.tasks.junit.TestResultAction.class).getFailedTests()
  println("Failed Count: ${testResults}")
  println("Failed Tests: ${failed}")
  def failures = [:]

  def result = build.getAction(hudson.tasks.junit.TestResultAction.class).result

  if (result == null) {
    emailReport = emailReport + "No test results"
  } else if (result.failCount < 1) {
    emailReport = emailReport + "No failures"
  } else {
    emailReport = emailReport + "overall fail count: ${result.failCount}\n\n"
  failedTests = result.getFailedTests();

  failedTests.each { test ->
    failures.put(test.fullDisplayName, test)
    emailReport = emailReport + "\n-------------------------------------------------\n"
    emailReport = emailReport + "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"
    }
  }
  return (emailReport)
}
Run Code Online (Sandbox Code Playgroud)

  • 我收到“没有这样的财产:班级经理:groovy.lang.Binding” (3认同)

Dan*_*oto 2

实现此目的的一种方法是编写Postbuild Groovy Script

在构建后的 groovy 脚本中,您可以通过 jenkins api 或文件系统从管道中执行的所有构建中检索所有工件。

获得所有信息后,我会将其很好地格式化为 HTML 并将其注入到Email-ext 插件中。

所以,步骤是:

  1. 将测试结果存档在测试作业中。例如,(例如**/surefire/**, **/failsafe/**
  2. 在管道作业中添加一个常规的构建后步骤。
  3. 收集工作流程期间启动的作业的内部版本号。一种方法是简单地从构建的控制台输出中解析它们。
  4. 只需遍历测试作业的存档目录即可从测试作业中获取测试结果 xml。例如,读入C:\Jenkins\Jobs\MyTestJob\builds\xxxx\surefire\test-results.xml)
  5. 使用 HTML 和 CSS 很好地格式化它。
  6. 将其注入 Ext 电子邮件插件中。一个简单的方法是在电子邮件内容中使用 ${FILE,path="pretty.html"}。请注意,您需要将文件写回从属设备才能正常工作。