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