簡體   English   中英

當 pytest 測試失敗時,Jenkins 作業失敗

[英]Jenkins Job fails when pytest test fails

只是想探索 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 作業也失敗。 我假設這是因為返回的退出代碼非零。 我將如何解決這個問題,即即使 1 個或多個測試確實失敗,Jenkins 的工作也不會。 謝謝

如果要在批處理文件或shell腳本中調用此測試執行,或者直接在Jenkins中使用命令執行。 您可以按照以下方式:

Windows:

<your test execution calls>

exit 0

Linux:

set +e

<your test execution calls>

set -e

如果在批處理腳本中調用它並且Jenkins將狀態顯示為成功,則將忽略該錯誤。

如果要在批處理文件或shell腳本中調用此測試執行,或者直接在Jenkins中使用命令執行。 您可以按照以下方式:下面的代碼不起作用

Linux的:

set +e

set -e

除了已經發布的答案:

您還可以將測試標記為xfail ,這意味着you know it will fail ,就像跳過:

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

更多關於跳過你可以在pytest文檔中找到

在Jenkins方面,您還可以通過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跳過測試,如上所述。

我們使用在 Windows 系統上運行的 Jenkins,因此我們的測試列在 Jenkins“執行 Windows 批處理命令”部分中。 我能夠通過使用單個 &(而不是 &&)分離可能有故障的測試來解決這個問題。 例如:"C:\\Program Files\\Git\\bin\\sh.exe" -c python -m venv env && pip3 install -r requirements.txt && py.test --tap-files test_that_may_fail.py & py.test - -tap-files next_test.py & py.test

由於我們使用 pytest,任何失敗都會在 python 中用斷言標記。 如果您使用“&&”,這將導致 Jenkins 作業中止並且不運行其他測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM