CI 管線

基本原理

在 CI 管線中測試的目標與在本機測試不同。實際上,您可以快速編輯一些程式碼並在您的電腦上再次執行測試,但在 CI 管線中這是不可能的。它們在單獨的伺服器上執行,並由特定動作觸發。

從這個觀察來看,pytest 可以偵測到它何時在 CI 環境中,並調整它的一些行為。

如何偵測 CI

當設定了以下任一環境變數時,無論其值為何,Pytest 都會知道它在 CI 環境中

  • CI:許多 CI 系統使用。

  • BUILD_NUMBER:Jenkins 使用。

對 CI 的影響

目前,在 CI 環境中對 pytest 的影響是有限的。

當偵測到 CI 環境時,簡短測試摘要資訊的輸出不再截斷為終端機大小,即將顯示完整訊息。

# content of test_ci.py
import pytest


def test_db_initialized():
    pytest.fail(
        "deliberately failing for demo purpose, Lorem ipsum dolor sit amet, "
        "consectetur adipiscing elit. Cras facilisis, massa in suscipit "
        "dignissim, mauris lacus molestie nisi, quis varius metus nulla ut ipsum."
    )

在本機執行此操作,不帶任何額外選項,將輸出

$ pytest test_ci.py
...
========================= short test summary info ==========================
FAILED test_backends.py::test_db_initialized[d2] - Failed: deliberately f...

(注意截斷的文字)

而在 CI 上執行此操作將輸出

$ export CI=true
$ pytest test_ci.py
...
========================= short test summary info ==========================
FAILED test_backends.py::test_db_initialized[d2] - Failed: deliberately failing
for demo purpose, Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras
facilisis, massa in suscipit dignissim, mauris lacus molestie nisi, quis varius
metus nulla ut ipsum.