conftest
Lösung
Die am wenigsten invasive Lösung ist das Hinzufügen einer leeren Datei mit dem Namen conftest.py
im repo/
Verzeichnis:
$ touch repo/conftest.py
Das ist es. Sie müssen keinen benutzerdefinierten Code schreiben, um das zu entstellen, sys.path
oder Sie müssen daran denken, mitzuschleppen PYTHONPATH
oder zu platzieren__init__.py
mitzunehmen in Verzeichnisse zu in die er nicht gehört.
Das Projektverzeichnis danach:
repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
└── test_app.py
Erläuterung
pytest
sucht nach den conftest
Modulen in der Testsammlung, um benutzerdefinierte Hooks und Fixtures zu erfassen, und pytest
fügtconftest.py
sys.path
zum Importieren der benutzerdefinierten Objekte das übergeordnete Verzeichnis von the zu (in diesem Fall dasrepo
Verzeichnis) hinzu.
Andere Projektstrukturen
Wenn Sie eine andere Projektstruktur haben, platzieren Sie das conftest.py
im Paketstammverzeichnis (dasjenige, das Pakete enthält, aber selbst kein Paket ist, also kein enthält __init__.py
), zum Beispiel:
repo
├── conftest.py
├── spam
│ ├── __init__.py
│ ├── bacon.py
│ └── egg.py
├── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
src
Layout
Obwohl dieser Ansatz mit dem src
Layout verwendet werden kann ( conftest.py
im src
Verzeichnis platzieren):
repo
├── src
│ ├── conftest.py
│ ├── spam
│ │ ├── __init__.py
│ │ ├── bacon.py
│ │ └── egg.py
│ └── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
Vorsicht , dass das Hinzufügen src
zu PYTHONPATH
den Sinn und Nutzen des mildert src
Layout! Am Ende testen Sie den Code aus dem Repository und nicht das installierte Paket. Wenn Sie es tun müssen, brauchen Sie vielleicht das src
Verzeichnis überhaupt nicht.
Wohin von hier aus?
Natürlich sind conftest
Module nicht nur einige Dateien, die bei der Erkennung des Quellcodes hilfreich sind. Hier finden alle projektspezifischen Verbesserungen des pytest
Frameworks und die Anpassung Ihrer Testsuite statt. pytest
hat viele Informationen zu conftest
Modulen, die in ihren Dokumenten verteilt sind ; Beginnen Sie mit conftest.py
: lokalen Plugins pro Verzeichnis
Außerdem hat SO eine ausgezeichnete Frage zu conftest
Modulen: Wozu werden in py.test conftest.py-Dateien verwendet?