conftest rozwiązanie
Najmniej inwazyjne rozwiązanie polega na dodaniu pustego pliku o nazwie conftest.pyw repo/katalogu:
$ touch repo/conftest.py
Otóż to. Nie ma potrzeby pisania niestandardowego kodu w celu manipulacji sys.pathlub pamiętaj, aby przeciągać PYTHONPATHlub umieszczać __init__.pyw katalogach, w których nie należy.
Katalog projektu następnie:
repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
└── test_app.py
Wyjaśnienie
pytestszuka conftestmodułów w kolekcji testowej, aby zebrać niestandardowe zaczepy i urządzenia, a aby zaimportować z nich niestandardowe obiekty, pytestdodaje katalog nadrzędny conftest.pydosys.path (w tym przypadku repokatalogu).
Inne struktury projektu
Jeśli masz inną strukturę projektu, umieść conftest.pykatalog w katalogu głównym pakietu (ten, który zawiera pakiety, ale sam nie jest pakietem, więc nie zawiera an __init__.py), na przykład:
repo
├── conftest.py
├── spam
│ ├── __init__.py
│ ├── bacon.py
│ └── egg.py
├── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
src układ
Chociaż tego podejścia można użyć z srcukładem (umieść conftest.pyw katalogu src):
repo
├── src
│ ├── conftest.py
│ ├── spam
│ │ ├── __init__.py
│ │ ├── bacon.py
│ │ └── egg.py
│ └── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
uwaga, że dodanie w srccelu PYTHONPATHzłagodzenia znaczenia i zalet srcukładu! Skończysz na testowaniu kodu z repozytorium, a nie zainstalowanego pakietu. Jeśli musisz to zrobić, może wcale nie potrzebujesz srcreż.
Dokąd się udać?
Oczywiście conftestmoduły to nie tylko niektóre pliki, które pomagają w odkrywaniu kodu źródłowego; w tym miejscu mają miejsce wszystkie udoskonalenia pytestframeworku specyficzne dla projektu i dostosowanie pakietu testowego. pytestma wiele informacji o conftestmodułach rozrzuconych po ich dokumentach ; zacznij od conftest.py: lokalnych wtyczek dla poszczególnych katalogów
Ponadto SO ma doskonałe pytanie dotyczące conftestmodułów: W py.test, do czego służą pliki conftest.py?