CI パイプライン

根拠

CI パイプラインでのテストの目的は、ローカルでのテストとは異なります。 実際、コードを迅速に編集して再度テストを実行できますが、CI パイプラインではそれができません。 CI パイプラインは別のサーバー上で実行され、特定の操作によって起動されます。

その観察により、pytest は CI 環境にいることを検出し、いくつかの動作を適応させることができます。

CI の検出方法

pytest は、いずれかの環境変数が設定されている場合 (値にかかわらず) に CI 環境にいることを認識します:

  • CI: 多くの CI システムに利用されます。

  • BUILD_NUMBER: Jenkins によって利用されます。

CI への影響

現時点では、pytest における CI 環境にいることの影響は限定的です。

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.