测试失败时,Jenkins MSTest + MSTestPublisher不会失败构建

时间:2019-06-01 19:04:53

标签: jenkins jenkins-pipeline

我正在进行Jenkins多分支管道项目,其中一个步骤将运行单元测试。当某些单元测试失败时,詹金斯将构建标记为不稳定,而不是失败。

stage('UnitTests') {
  steps {
    bat(returnStatus: true, script: """
      "MSTest" /resultsfile:"testresults-module1-Tests_${env.BUILD_ID}.trx" /testcontainer:bin/module1.Tests.dll"
      "MSTest" /resultsfile:"testresults-module2-Tests_${env.BUILD_ID}.trx" /testcontainer:bin/module2.Tests.dll"
    """)
    step([$class: 'MSTestPublisher', testResultsFile:"testresults*.trx", failOnError: true, keepLongStdio: true])
  }
}

当任何测试失败时,我需要这项工作失败。

1 个答案:

答案 0 :(得分:0)

我使用了一种解决方法来解决此问题。

stage('UnitTests') {
  steps {
    script {
      resultcmd = 0

      resultcmd += bat(returnStatus: true, script: """
        "MSTest" /resultsfile:"testresults-module1-Tests_${env.BUILD_ID}.trx" /testcontainer:bin/module1.Tests.dll"
        exit /b %errorlevel%
      """)

      resultcmd += bat(returnStatus: true, script: """
        "MSTest" /resultsfile:"testresults-module2-Tests_${env.BUILD_ID}.trx" /testcontainer:bin/module2.Tests.dll"
        exit /b %errorlevel%
      """)

      if (resultcmd > 0) {
        error("Tests failed")
      }
    }
  }
}

我在单独的bat块中执行每个命令,并将结果添加到名为resultcmd的变量中。然后,最后,我检查resultcmd的值,如果该值大于0,则强制执行错误。

我确定这不是最佳解决方案,但这是我找到的唯一解决方案。