Apakah ada cara untuk memilih pytest
tes untuk dijalankan dari file? Misalnya, file yang foo.txt
berisi daftar tes yang akan dieksekusi:
tests_directory/foo.py::test_001
tests_directory/bar.py::test_some_other_test
Atau, adakah cara untuk memilih beberapa tes, tidak memiliki pola umum dalam nama tes, dari direktori yang berbeda dengan pytest?
pytest -k <pattern>
memungkinkan satu pola.
Salah satu pilihan adalah untuk pytest.mark
menentang setiap pengujian, tetapi persyaratan saya adalah menjalankan kombinasi tes yang berbeda dari file yang berbeda.
Apakah ada cara untuk menentukan beberapa pola dan nama file uji untuk setiap pola?
Atau
Apakah ada cara untuk menentukan jalur pengujian yang tepat dalam file dan mengumpankan file itu sebagai input pytest
?
Atau
Apakah ada fungsi pengait yang dapat digunakan untuk tujuan ini?
py.test path/to/test/file.py -k function_name_test
Menentukan tes / memilih tes
Pytest mendukung beberapa cara untuk menjalankan dan memilih tes dari baris perintah.
Jalankan tes dalam sebuah modul
pytest test_mod.py
Jalankan tes dalam direktori
pytest testing/
Jalankan tes dengan ekspresi kata kunci
pytest -k "MyClass and not method"
Ini akan menjalankan tes yang berisi nama yang cocok dengan ekspresi string yang diberikan, yang dapat menyertakan operator Python yang menggunakan nama file, nama kelas, dan nama fungsi sebagai variabel. Contoh di atas akan berjalan
TestMyClass.test_something
tetapi tidakTestMyClass.test_method_simple
.Jalankan tes dengan id simpul
Setiap tes yang dikumpulkan ditugaskan unik
nodeid
yang terdiri dari nama file modul diikuti oleh penentu seperti nama kelas, nama fungsi dan parameter dari parametrization, dipisahkan oleh::
karakter.Untuk menjalankan tes tertentu dalam modul:
pytest test_mod.py::test_func
Contoh lain menentukan metode pengujian di baris perintah:
pytest test_mod.py::TestClass::test_method
Jalankan tes dengan ekspresi marker
pytest -m slow
Akan menjalankan semua tes yang didekorasi dengan
@pytest.mark.slow
dekorator.Untuk informasi lebih lanjut lihat tanda .
Jalankan tes dari paket
pytest --pyargs pkg.testing
Ini akan mengimpor
pkg.testing
dan menggunakan lokasi sistem file untuk menemukan dan menjalankan tes dari.Sumber: https://docs.pytest.org/en/latest/usage.html#specifying-tests-selecting-tests
sumber
Jika Anda memiliki nama metode yang sama di dua kelas yang berbeda dan Anda hanya ingin menjalankan salah satunya, ini berfungsi:
sumber
Metode 1 : Tes yang dipilih secara acak. Panjang dan jelek.
Metode 2: Gunakan Ekspresi Kata Kunci.
Catatan: Saya mencari dengan nama testcase. Hal yang sama berlaku untuk nama TestClass.
Kasus 1: Di bawah ini akan berjalan mana yang ditemukan. Karena kami telah menggunakan 'ATAU'.
Katakanlah kedua di atas benar, 2 tes akan dijalankan.
Kasus 2: Sekarang nama yang salah dan nama lain yang benar.
Hanya satu yang ditemukan dan dijalankan.
Kasus 3 : Jika Anda ingin semua tes berjalan atau tidak ada, gunakan DAN
Keduanya akan dijalankan jika benar atau tidak sama sekali.
Kasus 4: Jalankan uji hanya dalam satu folder:
Kasus 5: Jalankan tes dari hanya satu file.
Kasus 6: Jalankan semua tes kecuali kecocokan.
sumber
Menurut dokumen tentang Jalankan tes dengan id simpul
karena Anda memiliki semua id simpul di foo.txt, jalankan saja
ini sama dengan perintah di bawah ini (dengan konten file dalam pertanyaan)
sumber
Jawaban saya menyediakan cara untuk menjalankan subset pengujian dalam berbagai skenario.
Jalankan semua tes dalam suatu proyek
Jalankan tes di Direktori Tunggal
Untuk menjalankan semua tes dari satu direktori, gunakan direktori sebagai parameter untuk
pytest
:Jalankan tes dalam File / Modul Tes Tunggal
Untuk menjalankan file yang penuh dengan tes, daftar file dengan jalur relatif sebagai parameter untuk
pytest
:Jalankan Fungsi Uji Tunggal
Untuk menjalankan fungsi uji tunggal, tambahkan
::
dan nama fungsi tes:-v
digunakan sehingga Anda dapat melihat fungsi mana yang dijalankan.Jalankan Kelas Tes Tunggal
Untuk menjalankan kelas saja, lakukan seperti yang kami lakukan dengan fungsi dan tambahkan
::
, lalu nama kelas ke parameter file:Jalankan Metode Tes Tunggal Kelas Tes
Jika Anda tidak ingin menjalankan semua kelas tes, cukup satu metode, cukup tambahkan yang lain
::
dan nama metode:Jalankan Set Tes Berdasarkan Nama Uji
The
-k
pilihan memungkinkan Anda untuk lulus dalam sebuah ekspresi untuk menjalankan tes yang memiliki nama tertentu yang ditentukan oleh ekspresi sebagai substring dari nama tes. Dimungkinkan untuk menggunakan dan , atau , dan tidak membuat ekspresi yang kompleks.Misalnya, untuk menjalankan semua fungsi yang memiliki _raises dalam namanya:
sumber
Mungkin dengan menggunakan
pytest_collect_file()
pengait, Anda dapat menguraikan konten.txt
o.yaml
file di mana tes yang menentukan seperti yang Anda inginkan, dan mengembalikan mereka ke inti pytest.Contoh yang bagus ditunjukkan dalam dokumentasi pytest . Saya pikir apa yang Anda cari.
sumber
Berikut adalah sebagian jawaban yang mungkin, karena hanya memungkinkan pemilihan skrip tes, bukan tes individual dalam skrip tersebut.
Dan itu juga dibatasi oleh saya menggunakan mode kompatibilitas warisan vs
unittest
skrip, jadi tidak menjamin itu akan bekerja dengan pytest asli.Ini dia:
subset_tests_directory
.ln -s tests_directory/foo.py
ln -s tests_directory/bar.py
hati-hati dengan impor yang secara implisit menganggap file berada di
test_directory
. Saya harus memperbaiki beberapa dari mereka dengan menjalankanpython foo.py
, dari dalamsubset_tests_directory
dan mengoreksi sesuai kebutuhan.Setelah tes script mengeksekusi dengan benar, hanya
cd subset_tests_directory
danpytest
di sana. Pytest hanya akan mengambil skrip yang dilihatnya.Kemungkinan lain adalah symlinking dalam direktori pengujian Anda saat ini, katakan seperti
ln -s foo.py subset_foo.py
itupytest subset*.py
. Itu akan menghindari keharusan untuk menyesuaikan impor Anda, tetapi itu akan mengacaukan semuanya sampai Anda menghapus symlink. Bekerja untuk saya juga.sumber