当pytest测试失败时,Jenkins Job失败

时间:2014-08-07 19:26:50

标签: jenkins pytest

只想探索pytest并将其整合到Jenkins中。我的样本pytest测试用例是

def a(x):
    return x+1

def test_answer():
    assert a(2) == 3

def test_answer2():
    assert a(0) == 2

然后我生成了一个独立的pytest脚本,我在Jenkins中运行,生成一个xml来解析结果。

由于test_answer2失败,Jenkins作业也失败了。我假设这是因为返回的退出代码是非零的。我如何解决这个问题,即即使一个或多个测试确实失败,Jenkins的工作也不会。感谢

3 个答案:

答案 0 :(得分:2)

如果要在批处理文件或shell脚本中调用此测试执行,或者直接在Jenkins中使用命令执行。您可以按照以下方式:

Windows:

<your test execution calls>

exit 0

Linux:

set +e

<your test execution calls>

set -e

如果在批处理脚本中调用它并且Jenkins将状态显示为成功,则将忽略该错误。

答案 1 :(得分:0)

如果要在批处理文件或shell脚本中调用此测试执行,或者直接在Jenkins中使用命令执行。您可以按照以下方式: 下面的代码不工作

Linux的:

set +e

set -e

答案 2 :(得分:0)

除了已经发布的答案:

您还可以将测试标记为xfail,这意味着you know it will fail,就像跳过:

@pytest.mark.skip(reason="no way of currently testing this")
def test_the_unknown():
    ...

more about skipping you can find in pytest documentation

在詹金斯方面,您还可以通过简单的try / catch语句来操纵构建状态:

    try {
        bat "python -m pytest ..."
    } catch (pytestError) {
        // rewrite state of you build as you want, Success or Failed
        // currentBuild.result = "FAILED"
        currentBuild.result = "SUCCESS" // your case
        println pytestError
    }

但是请注意,每次pytest运行都会将整个构建标记为成功。最佳实践是如上所述跳过@pytest.mark.skip进行测试。

相关问题