Bagaimana cara memberi tahu py.test untuk melewati direktori tertentu?

91

Saya mencoba menggunakan norecursedirsopsi di dalam setup.cfg untuk memberi tahu py.test untuk tidak mengumpulkan tes dari direktori tertentu tetapi tampaknya itu mengabaikannya.

[tool:pytest]
norecursedirs=lib/third

Ketika saya menjalankan, py.testsaya melihat bagaimana ia mendapatkan tes dari dalam lib/third!

sorin
sumber
Sepertinya saya memiliki py.testdan pytestkeduanya menjalankan tes dan menjadi binatang yang berbeda. Aneh tetapi pytestyang gagal karena tidak memuat pengecualian dari [pytest].
sorin
1
pytestberasal dari logilab. Kamu mau py.test.
ecatmur
3
juga coba lakukannosecuredirs=lib/third/*
intelis
apakah ada cara untuk mengabaikan beberapa folder di skrip itu sendiri dengan kode?
bicepjai
2
berakhir di sini karena saya ingin tahu mengapa aplikasi web saya dalam pengembangan lokal sangat lambat ... Alasannya adalah beberapa direktori sumber daya yang diunggah dengan struktur yy / dd / mm bersarang .... menyebabkannya sangat menyebalkan! untungnya [pytest] norecursedirs = resourcesdalam pytest.inimelakukan trik! 💪
andilabs

Jawaban:

85

py.test --ignore=somedir bekerja untuk saya

shadfc.dll
sumber
5
Dan --ignoredapat ditentukan beberapa kali untuk mengabaikan beberapa direktori
phoenix
Cara melewati tes tertentu alih-alih direktori
Rajat jain
Anda dapat menggunakan -kopsi seperti yang ditunjukkan jawaban lain di bawah ini. Lihat "Menjalankan pengujian dengan ekspresi kata kunci" di docs.pytest.org/en/latest/… . Marks mungkin berguna di sini juga. Tandai tes Anda sebagai "lambat", dll dan kemudian gunakan-k "not slow"
shadfc
Ini juga dapat digunakan--ignore-glob untuk mengabaikan jalur file pengujian berdasarkan wildcard gaya shell Unix. Misal --ignore-glob=**/sandbox/*akan mengabaikan semua file di sandboxfolder manapun .
Jan M.
28

Jika Anda memiliki beberapa direktori dengan induk yang berbeda, Anda dapat menentukan --ignoreparameter yang berbeda :

py.test --ignore=somedir --ignore=otherdir --ignore=etcdir

  • opsi baru: --ignore akan mencegah jalur yang ditentukan dari koleksi.
    Dapat ditentukan beberapa kali.
David Batista
sumber
23

Saya memecahkan misterinya: Jika bagian pytest ditemukan di salah satu file konfigurasi yang mungkin ( pytest.ini, tox.inidansetup.cfg ), pytest tidak akan mencari yang lain jadi pastikan Anda menentukan opsi py.test dalam satu file.

Saya akan menyarankan menggunakan setup.cfg.

sorin
sumber
8
Kenapa setup.cfg? Dokumentasi saat ini tampaknya merekomendasikan dua lainnya
jebob
Saya rasa penting untuk menyebutkan bahwa jika Anda ingin menggunakan .inifile, Anda perlu menentukannya pytest -c pytest.ini. untuk beberapa alasan, setup.cfgkonten diambil secara otomatis.
kanan
17

Kamu bisa memakai

py.test -k 'not third'

yang mengecualikan semua konten direktori 'ketiga'.

Salvatore Avanzo
sumber
11

norecursedirsharus bekerja. Periksa apakah Anda memiliki pytest.ini atau file setup.cfg lainnya. Bagaimana Anda memohon py.test?

ecatmur.dll
sumber
1
Saya punya setup.cfgdengan yang tepat [pytest]dan norecorsedir di dalamnya tetapi tampaknya diabaikan, dan sebaliknya akan mencari semua file.
sorin
8

Dalam kasus saya, masalahnya adalah wildcard yang hilang. Pekerjaan berikut untuk saya:

[tool:pytest]
norecursedirs = subpath/*

padahal norecursedirs = subpathtidak.

bluenote10
sumber
Sama disini. Perilaku yang sangat aneh sekalipun.
azmeuk
0

Untuk menggunakan pytest.ini(yang disarankan, kecuali jika Anda menggunakan toxdalam hal tox.iniini masuk akal), panggil pytestdengan pytest -c pytest.ini.

Untuk mencegah sampel saya not_me_1.pydan not_me_2.pyagar tidak diuji atau diikat, saya pytest.iniadalah sebagai berikut:

[pytest]
addopts = --ignore-glob=not_me_*

[pycodestyle]
ignore = not_me_* ALL

kanan
sumber