Jenkins:捕获junit测试失败

时间:2018-10-02 20:44:47

标签: jenkins junit

我正在尝试让Jenkins在junit测试失败时发送Slack消息,但是在测试失败时它不会执行任何其他操作。 我在Multibranch Pipeline工作中在Jenkinsfile中使用脚本化管道。

这是管道中的测试阶段:

node {
    // setup and build Docker image
    stage("Test") {
        slackSend message: "Running tests!" 
        sh("docker run --rm -i \
            -v '${env.WORKSPACE}/tests/results/':/tmp/tests/results \
            ${image} python3 manage.py test")
        try {
            slackSend message: "Checking tests!" 
            junit 'tests/results/*.xml'
        } catch(err) {
            slackSend message: "Error in tests!" 
        } finally {
            slackSend message: "Finally in tests!" 
        }
    }
}

我故意添加了一个失败的测试用例。我希望看到的是所有四个Slack消息:Running tests!Checking tests!Error in tests!Finally in tests!,但是我看到的只是Running tests!,即使Checking消息位于junit行之前。

如果测试没有任何失败,那么我会看到RunningCheckingFinally松弛消息,正如我期望的那样。

当junit测试失败时,为什么try/catch不执行?

1 个答案:

答案 0 :(得分:2)

junit Pipeline命令不会生成异常,它仅准备/显示单元测试报告。在您的情况下,“真实单元测试失败”是在docker命令执行期间,因此您只需检查docker run返回代码。加上检查,测试失败时python3命令还会返回错误代码。

检查此答案以弄清楚如何获取docker run返回代码 How to get the numeric exit status of an exited docker container?