conftest
larutan
Solusi yang paling tidak invasif adalah menambahkan file kosong bernama conftest.py
dalam repo/
direktori:
$ touch repo/conftest.py
Itu dia. Tidak perlu menulis kode khusus untuk mengatur sys.path
atau mengingat untuk menyeret PYTHONPATH
, atau menempatkan __init__.py
ke dirs di tempat yang tidak seharusnya.
Direktori proyek sesudahnya:
repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
└── test_app.py
Penjelasan
pytest
mencari conftest
modul pada koleksi tes untuk mengumpulkan kait dan perlengkapan khusus, dan untuk mengimpor objek kustom dari mereka, pytest
menambahkan direktori induk conftest.py
kesys.path
(dalam hal ini repo
direktori).
Struktur proyek lainnya
Jika Anda memiliki struktur proyek lain, tempatkan conftest.py
direktori 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 src
tata letak (tempat conftest.py
di src
dir):
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 src
untuk PYTHONPATH
mengurangi arti dan manfaat dari src
tata letak! Anda akan berakhir dengan menguji kode dari repositori dan bukan paket yang diinstal. Jika Anda perlu melakukannya, mungkin Anda tidak perlu src
dir sama sekali.
Ke mana harus pergi dari sini
Tentu saja, conftest
modul bukan hanya beberapa file untuk membantu penemuan kode sumber; di situlah semua penyempurnaan spesifik proyek dari pytest
kerangka kerja dan penyesuaian suite pengujian Anda terjadi. pytest
memiliki banyak informasi tentang conftest
modul yang tersebar di seluruh dokumen mereka ; mulai dengan conftest.py
: plugin per-direktori lokal
Juga, SO memiliki pertanyaan yang sangat baik pada conftest
modul: Dalam py.test, apa gunanya file conftest.py?