conftest
soluzione
La soluzione meno invasiva è l'aggiunta di un file vuoto denominato conftest.py
nella repo/
directory:
$ touch repo/conftest.py
Questo è tutto. Non è necessario scrivere codice personalizzato per manipolare sys.path
o ricordare di trascinarlo PYTHONPATH
o posizionarlo __init__.py
in dir dove non appartiene.
La directory del progetto in seguito:
repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
└── test_app.py
Spiegazione
pytest
cerca i conftest
moduli per la raccolta di test per raccogliere ganci personalizzati e infissi, e al fine di importare gli oggetti personalizzati da loro, pytest
aggiunge la directory padre della conftest.py
allasys.path
(in questo caso la repo
directory).
Altre strutture di progetto
Se si dispone di un'altra struttura di progetto, posizionare il conftest.py
nella directory root del pacchetto (quello che contiene i pacchetti ma non è un pacchetto stesso, quindi non contiene un __init__.py
), ad esempio:
repo
├── conftest.py
├── spam
│ ├── __init__.py
│ ├── bacon.py
│ └── egg.py
├── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
src
disposizione
Sebbene questo approccio possa essere utilizzato con il src
layout (posizionare conftest.py
nella src
directory):
repo
├── src
│ ├── conftest.py
│ ├── spam
│ │ ├── __init__.py
│ │ ├── bacon.py
│ │ └── egg.py
│ └── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
attenzione che l'aggiunta src
per PYTHONPATH
mitigare il significato e i vantaggi del src
layout! Si finirà con il test del codice dal repository e non del pacchetto installato. Se hai bisogno di farlo, forse non hai bisogno del src
dir.
Dove andare da qui
Naturalmente, i conftest
moduli non sono solo alcuni file per aiutare la scoperta del codice sorgente; è qui che si verificano tutti i miglioramenti specifici del progetto del pytest
framework e la personalizzazione della suite di test. pytest
ha molte informazioni sui conftest
moduli sparsi nei loro documenti ; inizia con conftest.py
: plugin locali per directory
Inoltre, SO ha un'ottima domanda sui conftest
moduli: in py.test, a che cosa servono i file conftest.py?