Cara menyembunyikan peringatan deprecation internal py.test

98

Apakah ada cara untuk menyembunyikan peringatan deprecation internal pytest?

Konteks: Saya ingin mengevaluasi kesulitan porting test suite dari noseke pytest. Rangkaian ini cukup besar dan banyak generator pengujian berbasis nosegaya penggunaan yield.

Saya ingin terlebih dahulu memastikan pengujian yang ada lolos dengan pytest, dan mungkin mengubah generator pengujian menjadi parameterized.

Hanya berjalan $ pytest path-to-test-folderdengan pytest 3.0.4 sepenuhnya didominasi oleh halaman dan halaman

WC1 ~repos/numpy/numpy/lib/tests/test_twodim_base.py yield tests are deprecated, and scheduled to be removed in pytest 4.0

Apakah ada cara untuk mematikan peringatan ini?

ev-br
sumber

Jawaban:

93

Dari pytest --help:

--disable-pytest-warnings
                      disable warnings summary, overrides -r w flag
Penyusun
sumber
4
Seperti yang dikatakan teks bantuan, ini hanya akan menghilangkan ringkasan tekstual. Hasilnya masih akan berwarna kuning dan menunjukkan adanya peringatan.
David Pärsson
Lebih baik dimasukkan ke dalam file pytest.ini, seperti gambar di bawah ini.
vy32
96

pytest -p no:warnings, atau tambahkan berikut ini ke pytest.ini atau tox.ini Anda:

[pytest]
addopts = -p no:warnings

Hasilnya akan menjadi hijau tanpa indikasi peringatan. Lihat dokumentasi di https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary .

Ini bisa menjadi kasus penggunaan yang valid untuk rangkaian pengujian di mana Anda menginginkan keluaran yang bersih.

Ketahuilah bahwa selalu menyembunyikan semua peringatan dapat menyebabkan Anda melewatkan peringatan penting. Jika Anda hanya ingin menyembunyikan peringatan tertentu, lihat jawaban Cloc .

Blaise
sumber
2
addopts = -p no:warningsSANGAT BURUK, dan solusi CloC jauh lebih waras, tetapi saya harus menggunakan milik Anda ketika ignore::InsecureRequestWarningtidak dikenali, jadi Anda juga mendapatkan +1
Peter M. - singkatan dari Monica
Menonaktifkan semua peringatan secara terus-menerus (yaitu menggunakan pytest.ini) hampir tidak pernah merupakan ide yang bagus. Menonaktifkan hanya peringatan Deprecation (dan dengan modul) seperti yang dijelaskan CloC adalah cara yang tepat untuk melakukan ini.
Neowizard
74

Saya pikir Anda tidak ingin menyembunyikan semua peringatan, tetapi hanya yang tidak relevan. Dan dalam hal ini, peringatan depreksi dari modul python yang diimpor.

Membaca dokumentasi pytest tentang Warnings Capture :

Kedua opsi baris perintah -W dan opsi ini filterwarnings didasarkan pada opsi -W dan warnings.simplefilter milik Python , jadi silakan merujuk ke bagian tersebut dalam dokumentasi Python untuk contoh lain dan penggunaan lanjutan.

Jadi Anda bisa memfilter peringatan dengan -Wopsi python !

Tampaknya itu pytestbenar - benar menghapus filter, karena itu menunjukkan semua itu DeprecationWarningsaat berjalan, dan dokumentasi Python tentang Filter Peringatan Default dengan jelas mengatakan:

Dalam build rilis reguler, filter peringatan default memiliki entri berikut (dalam urutan prioritas):

default::DeprecationWarning:__main__
ignore::DeprecationWarning
ignore::PendingDeprecationWarning
ignore::ImportWarning
ignore::ResourceWarning

Jadi dalam kasus Anda, jika Anda ingin mengatakan untuk memfilter jenis peringatan yang ingin Anda abaikan, seperti itu DeprecationWarning, jalankan saja perintah pytest dengan -Wopsi:

$ pytest path-to-test-folder -W ignore::DeprecationWarning

EDIT : Dari komentar colini , dimungkinkan untuk memfilter berdasarkan modul. Contoh untuk mengabaikan peringatan penghentian dari semua sqlalchemy:

ignore::DeprecationWarning:sqlalchemy.*:

Anda kemudian dapat membuat daftar modul yang Anda instal yang menghasilkan terlalu banyak noise pada output pytest

Gunakan dengan file daripada di baris perintah:

Anda mungkin lebih suka mencantumkan filter tersebut di file pytest.ini:

[pytest]
filterwarnings =
    ignore::DeprecationWarning
CloC
sumber
11
Untuk memfilter modul, Anda menggunakan regex. Contoh untuk mengabaikan peringatan deprecation dari semua modul sqlalchemy:ignore::DeprecationWarning:sqlalchemy.*:
colini
@colini yang gagal bagi saya sebagai argumen untuk -W, tetapi berhasil untuk saya di file pytest.ini saya.
WhiteHotLoveTiger
10

Di file pytest.ini Anda dapat menambahkan:

[pytest]
addopts = -p no:warnings

ATAU lewat di bawah baris di baris perintah. Ini mungkin berguna jika rangkaian pengujian Anda menangani peringatan menggunakan sistem eksternal.

-p no: peringatan

ATAU jika Anda hanya ingin menyembunyikan beberapa peringatan tertentu yang tidak berlaku lagi, tambahkan pernyataan di bawah ini di file pytest.ini Anda

[pytest]
filterwarnings =
    ignore:.*U.*mode is deprecated:DeprecationWarning

Ini akan mengabaikan semua peringatan tipe DeprecationWarning di mana awal pesan cocok dengan ekspresi reguler ". * U. * mode deprecated".

ATAU Meskipun tidak disarankan, Anda dapat menggunakan

--disable-warnings

opsi baris perintah untuk menyembunyikan ringkasan peringatan sepenuhnya dari keluaran uji coba.

pk786
sumber
5

Saya tidak ingin menyembunyikan semua peringatan, jadi saya memasukkan ini pytest.ini

[pytest]
filterwarnings =
    ignore::DeprecationWarning
Polv
sumber