Wie man Testfunktionen mit Attributen markiert

Mit dem Helfer pytest.mark können Sie Testfunktionen einfach mit Metadaten versehen. Die vollständige Liste der integrierten Marker finden Sie im API-Referenz. Oder Sie können alle Marker, einschließlich integrierte und benutzerdefinierte, über die CLI auflisten - pytest --markers.

Hier sind einige der integrierten Marker

  • usefixtures - Fixtures für eine Testfunktion oder Klasse verwenden

  • filterwarnings - Bestimmte Warnungen einer Testfunktion filtern

  • skip - Eine Testfunktion immer überspringen

  • skipif - Eine Testfunktion überspringen, wenn eine bestimmte Bedingung erfüllt ist

  • xfail - Ein "erwartetes Fehlschlagen"-Ergebnis erzeugen, wenn eine bestimmte Bedingung erfüllt ist

  • parametrize - Mehrere Aufrufe derselben Testfunktion durchführen.

Es ist einfach, benutzerdefinierte Marker zu erstellen oder Marker auf ganze Testklassen oder Module anzuwenden. Diese Marker können von Plugins verwendet werden und werden auch häufig dazu verwendet, Tests auf der Kommandozeile mit der Option -m auszuwählen.

Siehe Arbeiten mit benutzerdefinierten Markern für Beispiele, die auch als Dokumentation dienen.

Hinweis

Marker können nur auf Tests angewendet werden und haben keine Auswirkungen auf Fixtures.

Registrieren von Markern

Sie können benutzerdefinierte Marker in Ihrer Konfigurationsdatei wie folgt registrieren

[pytest]
markers = [
    "slow: marks tests as slow (deselect with '-m \"not slow\"')",
    "serial",
]
[pytest]
markers =
    slow: marks tests as slow (deselect with '-m "not slow"')
    serial

Beachten Sie, dass alles nach dem : nach dem Markernamen eine optionale Beschreibung ist.

Alternativ können Sie neue Marker programmatisch in einem pytest_configure Hook registrieren

def pytest_configure(config):
    config.addinivalue_line(
        "markers", "env(name): mark test to run only on named environment"
    )

Registrierte Marker erscheinen in der Hilfe von pytest und geben keine Warnungen aus (siehe nächster Abschnitt). Es wird empfohlen, dass Drittanbieter-Plugins immer ihre Marker registrieren.

Fehler bei unbekannten Markern auslösen

Nicht registrierte Marker, die mit dem Dekorator @pytest.mark.name_of_the_mark angewendet werden, geben immer eine Warnung aus, um zu vermeiden, dass aufgrund von Tippfehlern versehentlich etwas Unerwartetes geschieht. Wie im vorherigen Abschnitt beschrieben, können Sie die Warnung für benutzerdefinierte Marker deaktivieren, indem Sie sie in Ihrer Konfigurationsdatei registrieren oder einen benutzerdefinierten pytest_configure Hook verwenden.

Wenn die Konfigurationsoption strict_markers gesetzt ist, löst jeder unbekannte Marker, der mit dem Dekorator @pytest.mark.name_of_the_mark angewendet wird, einen Fehler aus. Sie können diese Validierung in Ihrem Projekt erzwingen, indem Sie strict_markers in Ihrer Konfiguration setzen

[pytest]
addopts = ["--strict-markers"]
markers = [
    "slow: marks tests as slow (deselect with '-m \"not slow\"')",
    "serial",
]
[pytest]
strict_markers = true
markers =
    slow: marks tests as slow (deselect with '-m "not slow"')
    serial