conftest larutan
Solusi yang paling tidak invasif adalah menambahkan file kosong bernama conftest.pydalam repo/direktori:
$ touch repo/conftest.py
Itu dia. Tidak perlu menulis kode khusus untuk mengatur sys.pathatau mengingat untuk menyeret PYTHONPATH, atau menempatkan __init__.pyke dirs di tempat yang tidak seharusnya.
Direktori proyek sesudahnya:
repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
└── test_app.py
Penjelasan
pytestmencari conftestmodul pada koleksi tes untuk mengumpulkan kait dan perlengkapan khusus, dan untuk mengimpor objek kustom dari mereka, pytestmenambahkan direktori induk conftest.pykesys.path (dalam hal ini repodirektori).
Struktur proyek lainnya
Jika Anda memiliki struktur proyek lain, tempatkan conftest.pydirektori dir paket (yang berisi paket tetapi bukan paket itu sendiri, jadi tidak mengandung __init__.py), misalnya:
repo
├── conftest.py
├── spam
│ ├── __init__.py
│ ├── bacon.py
│ └── egg.py
├── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
src tata letak
Meskipun pendekatan ini dapat digunakan dengan srctata letak (tempat conftest.pydi srcdir):
repo
├── src
│ ├── conftest.py
│ ├── spam
│ │ ├── __init__.py
│ │ ├── bacon.py
│ │ └── egg.py
│ └── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
waspadalah bahwa menambahkan srcuntuk PYTHONPATHmengurangi arti dan manfaat dari srctata letak! Anda akan berakhir dengan menguji kode dari repositori dan bukan paket yang diinstal. Jika Anda perlu melakukannya, mungkin Anda tidak perlu srcdir sama sekali.
Ke mana harus pergi dari sini
Tentu saja, conftestmodul bukan hanya beberapa file untuk membantu penemuan kode sumber; di situlah semua penyempurnaan spesifik proyek dari pytestkerangka kerja dan penyesuaian suite pengujian Anda terjadi. pytestmemiliki banyak informasi tentang conftestmodul yang tersebar di seluruh dokumen mereka ; mulai dengan conftest.py: plugin per-direktori lokal
Juga, SO memiliki pertanyaan yang sangat baik pada conftestmodul: Dalam py.test, apa gunanya file conftest.py?