conftest soluzione
La soluzione meno invasiva è l'aggiunta di un file vuoto denominato conftest.pynella repo/directory:
$ touch repo/conftest.py
Questo è tutto. Non è necessario scrivere codice personalizzato per manipolare sys.patho ricordare di trascinarlo PYTHONPATHo posizionarlo __init__.pyin dir dove non appartiene.
La directory del progetto in seguito:
repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
└── test_app.py
Spiegazione
pytestcerca i conftestmoduli per la raccolta di test per raccogliere ganci personalizzati e infissi, e al fine di importare gli oggetti personalizzati da loro, pytestaggiunge la directory padre della conftest.pyallasys.path (in questo caso la repodirectory).
Altre strutture di progetto
Se si dispone di un'altra struttura di progetto, posizionare il conftest.pynella 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 srclayout (posizionare conftest.pynella srcdirectory):
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 srcper PYTHONPATHmitigare il significato e i vantaggi del srclayout! Si finirà con il test del codice dal repository e non del pacchetto installato. Se hai bisogno di farlo, forse non hai bisogno del srcdir.
Dove andare da qui
Naturalmente, i conftestmoduli non sono solo alcuni file per aiutare la scoperta del codice sorgente; è qui che si verificano tutti i miglioramenti specifici del progetto del pytestframework e la personalizzazione della suite di test. pytestha molte informazioni sui conftestmoduli sparsi nei loro documenti ; inizia con conftest.py: plugin locali per directory
Inoltre, SO ha un'ottima domanda sui conftestmoduli: in py.test, a che cosa servono i file conftest.py?