CI Pipelines

Begründung

Das Ziel von Tests in einer CI-Pipeline ist anders als das Testen lokal. In der Tat können Sie schnell etwas Code bearbeiten und Ihre Tests auf Ihrem Computer erneut ausführen, aber dies ist mit einer CI-Pipeline nicht möglich. Sie laufen auf einem separaten Server und werden durch bestimmte Aktionen ausgelöst.

Aus dieser Beobachtung heraus kann pytest erkennen, wann es sich in einer CI-Umgebung befindet und einige seiner Verhaltensweisen anpassen.

Wie CI erkannt wird

Pytest weiß, dass es sich in einer CI-Umgebung befindet, wenn entweder eine dieser Umgebungsvariablen auf einen nicht-leeren Wert gesetzt ist

  • CI: wird von vielen CI-Systemen verwendet.

  • BUILD_NUMBER: wird von Jenkins verwendet.

Auswirkungen auf CI

Für den Moment sind die Auswirkungen, in einer CI-Umgebung zu sein, auf pytest begrenzt.

Wenn eine CI-Umgebung erkannt wird, wird die Ausgabe der kurzen Testzusammenfassung nicht mehr auf die Terminalgröße gekürzt, d.h. die gesamte Meldung wird angezeigt.

# 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."
    )

Wenn dies lokal ausgeführt wird, ohne zusätzliche Optionen, wird ausgegeben

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

(Beachten Sie den gekürzten Text)

Während die Ausführung dies auf CI wird ausgegeben

$ 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.