Mencetak waktu eksekusi uji dan menentukan uji lambat dengan py.test

120

Saya menjalankan pengujian unit pada server CI menggunakan py.test. Pengujian menggunakan sumber daya eksternal yang diambil melalui jaringan. Terkadang test runner membutuhkan waktu terlalu lama, menyebabkan test runner dibatalkan. Saya tidak bisa mengulangi masalah secara lokal.

Apakah ada cara untuk membuat py.test mencetak waktu eksekusi pengujian (lambat), jadi menjepit pengujian yang bermasalah menjadi lebih mudah?

Mikko Ohtamaa
sumber

Jawaban:

174

Saya tidak yakin ini akan menyelesaikan masalah Anda, tetapi Anda dapat lulus --durations=Nuntuk mencetak Npengujian paling lambat setelah rangkaian pengujian selesai.

Gunakan --durations=0untuk mencetak semua.

Bruno Oliveira
sumber
89
Jika Anda melewati --durations=0waktu eksekusi untuk SEMUA tes akan dilaporkan.
oLas
Apakah Anda tahu jika ada kemungkinan untuk menambahkannya ke laporan cakupan HTML yang dibuat? Mirip seperti menambahkan .coveragercfile dengan konten [run] branch = Truemenambahkan informasi cakupan percabangan?
Martin Thoma
Anda perlu menambahkan informasi itu sendiri, pytest-html memiliki dukungan untuk memasukkan konten tambahan.
Bruno Oliveira
4
@oLas: Itu tidak benar: Jika pengujian "terlalu cepat", waktu yang diukur tampaknya bisa menjadi 0 dan mereka masih akan disaring. Ambang batas negatif juga tidak membantu dalam kasus ini. Gangguan lain dengan pendekatan ini adalah pytest akan selalu mencetak (0.00 durations hidden. Use -vv to show these durations.)yang tidak masuk akal.
bluenote10
18

Anda dapat memberikan nomor tersebut dengan --durations

pytest --durations=0 — Show all times for tests and setup and teardown

pytest --durations=1 — Just show me the slowest

pytest --durations=50 — Slowest 50, with times,  etc

Lihat: https://medium.com/@brianokken/pytest-durations-0-show-all-times-for-tests-and-setup-and-teardown-848dccac85db

Atau: https://docs.pytest.org/en/latest/usage.html#profiling-test-execution-duration

Phuong
sumber