conftest
Solution
La solution la moins invasive consiste à ajouter un fichier vide nommé conftest.py
dans le repo/
répertoire:
$ touch repo/conftest.py
C'est tout. Pas besoin d'écrire du code personnalisé pour manipuler le sys.path
ou n'oubliez pas de le faire glisser PYTHONPATH
, ou de le placer __init__.py
dans des répertoires où il n'appartient pas.
Le répertoire du projet ensuite:
repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
└── test_app.py
Explication
pytest
recherche les conftest
modules sur la collection de tests pour rassembler des crochets et des fixtures personnalisés, et afin d'en importer les objets personnalisés, pytest
ajoute le répertoire parent de conftest.py
àsys.path
(dans ce cas, le repo
répertoire).
Autres structures de projet
Si vous avez une autre structure de projet, placez le conftest.py
dans le répertoire racine du package (celui qui contient les packages mais n'est pas un package lui-même, donc ne contient pas de __init__.py
), par exemple:
repo
├── conftest.py
├── spam
│ ├── __init__.py
│ ├── bacon.py
│ └── egg.py
├── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
src
disposition
Bien que cette approche puisse être utilisée avec la src
mise en page (place conftest.py
dans le src
répertoire):
repo
├── src
│ ├── conftest.py
│ ├── spam
│ │ ├── __init__.py
│ │ ├── bacon.py
│ │ └── egg.py
│ └── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
méfiez-vous que l'ajout src
pour PYTHONPATH
atténuer le sens et les avantages de la src
mise en page! Vous finirez par tester le code du référentiel et non le package installé. Si vous devez le faire, vous n'avez peut-être pas du tout besoin du src
répertoire.
Où aller en partant d'ici
Bien sûr, les conftest
modules ne sont pas seulement des fichiers pour faciliter la découverte du code source; c'est là que toutes les améliorations spécifiques au projet du pytest
cadre et la personnalisation de votre suite de tests se produisent. pytest
a beaucoup d'informations sur les conftest
modules dispersés dans leurs documents ; commencer par conftest.py
: plugins locaux par répertoire
Aussi, SO a une excellente question sur les conftest
modules: dans py.test, à quoi sert les fichiers conftest.py?