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 rootdir wurzelt 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_cache Unterverzeichnis in rootdir, 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 -c in der Befehlszeile übergeben wird, verwenden Sie dies als Konfigurationsdatei und dessen Verzeichnis als rootdir.

  • 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.ini und setup.cfg-Dateien im Elternverzeichnis und aufwärts. Wenn eine Übereinstimmung gefunden wird, wird sie zur configfile und ihr Verzeichnis zum rootdir.

  • Wenn keine Konfigurationsdatei gefunden wurde, suchen Sie von der gemeinsamen Elternverzeichnis aufwärts nach setup.py, um das rootdir zu bestimmen.

  • Wenn keine setup.py gefunden wurde, suchen Sie nach pytest.toml, .pytest.toml, pytest.ini, .pytest.ini, pyproject.toml, tox.ini und setup.cfg in jedem der angegebenen args und aufwärts. Wenn eine Übereinstimmung gefunden wird, wird sie zur configfile und ihr Verzeichnis zum rootdir.

  • Wenn keine configfile gefunden 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 (nach pytest.toml und .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 ermittelte configfile, kann None sein (wird aus historischen Gründen inipath genannt).

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