Konfiguration¶
Befehlszeilenoptionen und Einstellungen der Konfigurationsdatei¶
Sie können Hilfe zu Befehlszeilen- und Konfigurationsoptionen erhalten, indem Sie die allgemeine Hilfeoption verwenden
pytest -h # prints options _and_ config file settings
Dies zeigt die von installierten Plugins registrierten Befehlszeilen- und Konfigurationsdatei-Einstellungen an.
Konfigurationsdateiformate¶
Viele pytest-Einstellungen können in einer Konfigurationsdatei festgelegt werden, die per Konvention im Stammverzeichnis Ihres Repositories liegt.
Ein kurzes Beispiel für die von pytest unterstützten Konfigurationsdateien
pytest.toml¶
Hinzugefügt in Version 9.0.
pytest.toml Dateien haben Vorrang vor anderen Dateien, auch wenn sie leer sind.
Alternativ kann die versteckte Version .pytest.toml verwendet werden.
# pytest.toml or .pytest.toml
[pytest]
minversion = "9.0"
addopts = ["-ra", "-q"]
testpaths = [
"tests",
"integration",
]
pytest.ini¶
pytest.ini Dateien haben Vorrang vor anderen Dateien (außer pytest.toml und .pytest.toml), auch wenn sie leer sind.
Alternativ kann die versteckte Version .pytest.ini verwendet werden.
# pytest.ini or .pytest.ini
[pytest]
minversion = 6.0
addopts = -ra -q
testpaths =
tests
integration
pyproject.toml¶
Hinzugefügt in Version 6.0.
Geändert in Version 9.0.
Dateien pyproject.toml werden zur Konfiguration unterstützt.
Verwenden Sie [tool.pytest], um native TOML-Typen zu nutzen (unterstützt seit pytest 9.0)
# pyproject.toml
[tool.pytest]
minversion = "9.0"
addopts = ["-ra", "-q"]
testpaths = [
"tests",
"integration",
]
Verwenden Sie [tool.pytest.ini_options] für INI-artige Konfiguration (unterstützt seit pytest 6.0)
# pyproject.toml
[tool.pytest.ini_options]
minversion = "6.0"
addopts = "-ra -q"
testpaths = [
"tests",
"integration",
]
tox.ini¶
tox.ini Dateien sind die Konfigurationsdateien des tox Projekts und können auch pytest-Konfigurationen enthalten, wenn sie einen [pytest] Abschnitt haben.
# tox.ini
[pytest]
minversion = 6.0
addopts = -ra -q
testpaths =
tests
integration
setup.cfg¶
setup.cfg Dateien sind allgemeine Konfigurationsdateien, die ursprünglich von distutils (jetzt veraltet) und setuptools verwendet wurden, und können auch pytest-Konfigurationen enthalten, wenn sie einen [tool:pytest] Abschnitt haben.
# setup.cfg
[tool:pytest]
minversion = 6.0
addopts = -ra -q
testpaths =
tests
integration
Warnung
Die Verwendung von setup.cfg wird nicht empfohlen, es sei denn für sehr einfache Anwendungsfälle. .cfg Dateien verwenden einen anderen Parser als pytest.ini und tox.ini, was zu schwer nachvollziehbaren Problemen führen kann. Wenn möglich, wird empfohlen, die letzteren Dateien oder pyproject.toml zu verwenden, um Ihre pytest-Konfiguration zu speichern.
Initialisierung: Bestimmung von rootdir und configfile¶
pytest bestimmt für jeden Testlauf ein rootdir, das von den Befehlszeilenargumenten (angegebene Testdateien, Pfade) und vom Vorhandensein von Konfigurationsdateien abhängt. Das ermittelte rootdir und configfile werden als Teil der pytest-Kopfzeile während des Starts ausgegeben.
Hier ist eine Zusammenfassung, wofür pytest rootdir verwendet
Erstellt während der Sammlung nodeids; jedem Test wird ein eindeutiger nodeid zugewiesen, der im
rootdirwurzelt und den vollständigen Pfad, Klassennamen, Funktionsnamen und Parametrisierung (falls vorhanden) berücksichtigt.Wird von Plugins als stabiler Speicherort für projekt-/testlaufbezogene Informationen verwendet; beispielsweise erstellt das interne Cache-Plugin ein
.pytest_cacheUnterverzeichnis inrootdir, um seinen Zustandsübergreifenden Testlauf zu speichern.
rootdir wird **NICHT** verwendet, um sys.path/PYTHONPATH zu ändern oder zu beeinflussen, wie Module importiert werden. Weitere Details finden Sie unter pytest Importmechanismen und sys.path/PYTHONPATH.
Die Befehlszeilenoption --rootdir=path kann verwendet werden, um ein bestimmtes Verzeichnis zu erzwingen. Beachten Sie, dass im Gegensatz zu anderen Befehlszeilenoptionen --rootdir nicht mit addopts in einer Konfigurationsdatei verwendet werden kann, da rootdir bereits verwendet wird, um die Konfigurationsdatei zu *finden*.
Finden des rootdir¶
Hier ist der Algorithmus, der das rootdir aus args findet
Wenn
-cin der Befehlszeile übergeben wird, verwenden Sie dies als Konfigurationsdatei und dessen Verzeichnis alsrootdir.Bestimmen Sie das gemeinsame Elternverzeichnis für die angegebenen
args, die als im Dateisystem vorhandene Pfade erkannt werden. Wenn keine solchen Pfade gefunden werden, wird das gemeinsame Elternverzeichnis auf das aktuelle Arbeitsverzeichnis gesetzt.Suchen Sie nach
pytest.toml,.pytest.toml,pytest.ini,.pytest.ini,pyproject.toml,tox.iniundsetup.cfg-Dateien im Elternverzeichnis und aufwärts. Wenn eine Übereinstimmung gefunden wird, wird sie zurconfigfileund ihr Verzeichnis zumrootdir.Wenn keine Konfigurationsdatei gefunden wurde, suchen Sie von der gemeinsamen Elternverzeichnis aufwärts nach
setup.py, um dasrootdirzu bestimmen.Wenn keine
setup.pygefunden wurde, suchen Sie nachpytest.toml,.pytest.toml,pytest.ini,.pytest.ini,pyproject.toml,tox.iniundsetup.cfgin jedem der angegebenenargsund aufwärts. Wenn eine Übereinstimmung gefunden wird, wird sie zurconfigfileund ihr Verzeichnis zumrootdir.Wenn keine
configfilegefunden wurde und kein Konfigurationsargument übergeben wird, verwenden Sie die bereits ermittelte gemeinsame Elternverzeichnis als Root-Verzeichnis. Dies ermöglicht die Verwendung von pytest in Strukturen, die kein Paket sind und keine spezifische Konfigurationsdatei haben.
Wenn keine args angegeben sind, sammelt pytest Tests unter dem aktuellen Arbeitsverzeichnis und beginnt auch dort mit der Bestimmung des rootdir.
Dateien werden nur für die Konfiguration abgeglichen, wenn
pytest.toml: wird immer abgeglichen und hat die höchste Priorität, auch wenn leer.pytest.ini: wird immer abgeglichen und hat Vorrang (nachpytest.tomlund.pytest.toml), auch wenn leer.pyproject.toml: enthält eine[tool.pytest]oder[tool.pytest.ini_options]Tabelle.tox.ini: enthält einen[pytest]Abschnitt.setup.cfg: enthält einen[tool:pytest]Abschnitt.
Schließlich wird eine pyproject.toml Datei als configfile betrachtet, wenn keine andere Übereinstimmung gefunden wurde. In diesem Fall auch, wenn sie keine [tool.pytest] Tabelle (seit Version 9.0) oder eine [tool.pytest.ini_options] Tabelle (seit Version 8.1) enthält.
Die Dateien werden in der obigen Reihenfolge berücksichtigt. Optionen aus mehreren configfiles Kandidaten werden nie zusammengeführt – die erste Übereinstimmung gewinnt.
Die Konfigurationsdatei bestimmt auch den Wert des rootpath.
Das Config-Objekt (zugänglich über Hooks oder über die pytestconfig-Fixture) wird anschließend diese Attribute tragen
config.rootpath: das ermittelte Stammverzeichnis, das garantiert existiert. Es wird als Referenzverzeichnis für die Konstruktion von Testadressen ("nodeids") verwendet und kann auch von Plugins zum Speichern von Informationen pro Testlauf verwendet werden.config.inipath: die ermittelteconfigfile, kannNonesein (wird aus historischen Gründeninipathgenannt).
Hinzugefügt in Version 6.1: Die Eigenschaften config.rootpath und config.inipath. Sie sind pathlib.Path-Versionen der älteren config.rootdir und config.inifile, die vom Typ py.path.local sind und aus Gründen der Abwärtskompatibilität weiterhin existieren.
Beispiel
pytest path/to/testdir path/other/
bestimmt die gemeinsame Elternverzeichnis als path und prüft dann wie folgt auf Konfigurationsdateien
# first look for path/pytest.toml
path/pytest.toml
path/pytest.ini
path/pyproject.toml # must contain a [tool.pytest] table to match
path/tox.ini # must contain [pytest] section to match
path/setup.cfg # must contain [tool:pytest] section to match
pytest.toml
pytest.ini
... # all the way up to the root
# now look for setup.py
path/setup.py
setup.py
... # all the way up to the root
Warnung
Benutzerdefinierte pytest-Plugin-Befehlszeilenargumente können einen Pfad enthalten, wie z.B. pytest --log-output ../../test.log args. Dann ist args obligatorisch, andernfalls verwendet pytest den Ordner von test.log für die rootdir-Bestimmung (siehe auch #1435). Ein Punkt . zur Referenzierung des aktuellen Arbeitsverzeichnisses ist ebenfalls möglich.
Integrierte Optionen für Konfigurationsdateien¶
Die vollständige Liste der Optionen finden Sie in der Referenzdokumentation.
Anpassung des Syntaxhervorhebungsthemas¶
Die von pytest verwendeten Syntaxhervorhebungsthemen können mit zwei Umgebungsvariablen angepasst werden
PYTEST_THEMEsetzt einen pygment-Stil, der verwendet werden soll.PYTEST_THEME_MODEsetzt diesen Stil auf hell oder dunkel.