conftest Lösung
Die am wenigsten invasive Lösung ist das Hinzufügen einer leeren Datei mit dem Namen conftest.pyim repo/Verzeichnis:
$ touch repo/conftest.py
Das ist es. Sie müssen keinen benutzerdefinierten Code schreiben, um das zu entstellen, sys.pathoder Sie müssen daran denken, mitzuschleppen PYTHONPATHoder 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
pytestsucht nach den conftestModulen in der Testsammlung, um benutzerdefinierte Hooks und Fixtures zu erfassen, und pytestfügtconftest.pysys.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.pyim 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 srcLayout verwendet werden kann ( conftest.pyim srcVerzeichnis 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 srczu PYTHONPATHden Sinn und Nutzen des mildert srcLayout! Am Ende testen Sie den Code aus dem Repository und nicht das installierte Paket. Wenn Sie es tun müssen, brauchen Sie vielleicht das srcVerzeichnis überhaupt nicht.
Wohin von hier aus?
Natürlich sind conftestModule nicht nur einige Dateien, die bei der Erkennung des Quellcodes hilfreich sind. Hier finden alle projektspezifischen Verbesserungen des pytestFrameworks und die Anpassung Ihrer Testsuite statt. pytesthat viele Informationen zu conftestModulen, die in ihren Dokumenten verteilt sind ; Beginnen Sie mit conftest.py: lokalen Plugins pro Verzeichnis
Außerdem hat SO eine ausgezeichnete Frage zu conftestModulen: Wozu werden in py.test conftest.py-Dateien verwendet?