Py.test dahili kullanımdan kaldırma uyarıları nasıl engellenir


98

Pytest'in dahili kullanımdan kaldırma uyarılarını bastırmanın bir yolu var mı?

Bağlam: Bir test paketini den ' nosee taşımanın zorluğunu değerlendirmek istiyorum pytest. Paket oldukça geniştir ve ağırlıklı olarak nosestil yieldbazlı test jeneratörlerini kullanır .

Öncelikle mevcut testlerin pytest ile geçtiğinden emin olmak istiyorum ve sonra belki test jeneratörlerini olarak değiştirebilirim parameterized.

Sadece $ pytest path-to-test-folderpytest 3.0.4 ile çalıştırmak , tamamen sayfaların ve sayfaların hakimiyetindedir.

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

Bu uyarıları kapatmanın bir yolu var mı?

Yanıtlar:


93

Kimden pytest --help:

--disable-pytest-warnings
                      disable warnings summary, overrides -r w flag

4
Yardım metninin dediği gibi, bu yalnızca metinsel özeti çıkaracaktır. Sonuç yine sarı olacak ve uyarıların olduğunu gösterecektir.
David Pärsson

Aşağıda gösterildiği gibi pytest.ini dosyasına koymak daha iyidir.
vy32

96

pytest -p no:warningsveya aşağıdakileri pytest.ini veya tox.ini dosyanıza ekleyin:

[pytest]
addopts = -p no:warnings

Sonuç, herhangi bir uyarı belirtilmeden yeşil olacaktır. Https://docs.pytest.org/en/latest/warnings.html#disicing-warnings-summary adresindeki belgelere bakın .

Bu, temiz çıktı almak istediğiniz bir test paketi için geçerli bir kullanım durumu olabilir.

Her zaman tüm uyarıları gizlemenin önemli uyarıları kaçırmanıza neden olabileceğini unutmayın. Yalnızca belirli uyarıları gizlemek istiyorsanız, Cloc'un cevabına bakın .


2
addopts = -p no:warningsGERÇEKTEN KÖTÜ bir fikir ve CloC çözümü çok daha mantıklı, ancak ignore::InsecureRequestWarningtanınmadığında sizinkini kullanmak zorunda kaldım , bu yüzden siz de +1 kazandınız
Peter M. - Monica

Tüm uyarıları kalıcı olarak devre dışı bırakmak (yani pytest.ini'yi kullanmak) neredeyse hiçbir zaman iyi bir fikir değildir. CloC'nin açıkladığı gibi sadece Kullanımdan kaldırma uyarısını (ve modüle göre) devre dışı bırakmak, bunu yapmanın doğru yoludur.
Neowizard

74

Bence tüm uyarıları değil, sadece alakalı olmayanları gizlemek istiyorsunuz. Ve bu durumda, içe aktarılan python modüllerinden kullanımdan çıkarma uyarıları.

Uyarı Yakalama hakkında pytest belgelerini okuyun :

Hem -W komut satırı seçeneği hem de filtre uyarıları ini seçeneği Python'un kendi -W seçeneğine ve uyarılarına dayanmaktadır. Basitfilter , bu nedenle diğer örnekler ve gelişmiş kullanım için lütfen Python belgelerindeki bölümlere bakın.

Böylece uyarıları python -Wseçeneğiyle filtreleyebilirsiniz !

Görünüşe göre pytestfiltreleri tamamen kaldırıyor, çünkü DeprecationWarningçalışırken hepsini gösteriyor ve Python'un Varsayılan Uyarı Filtreleri hakkındaki belgeleri açıkça şunu söylüyor:

Normal sürüm yapılarında, varsayılan uyarı filtresi aşağıdaki girişlere sahiptir (öncelik sırasına göre):

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

Dolayısıyla sizin durumunuzda, göz ardı etmek istediğiniz uyarı türlerini filtrelemek istiyorsanız, örneğin bunlar gibi DeprecationWarning, pytest komutunu şu -Wseçenekle çalıştırın :

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

DÜZENLEME : colini'nin yorumundan modüle göre filtrelemek mümkündür. Tüm sqlalchemy'den kullanımdan kaldırma uyarılarını göz ardı etme örneği:

ignore::DeprecationWarning:sqlalchemy.*:

Ardından, çıkışında çok fazla gürültü oluşturan kurulu modüllerinizi listeleyebilirsiniz. pytest

Komut satırı yerine dosya ile kullanın:

Bu filtreleri pytest.ini dosyasında listelemeyi tercih edebilirsiniz:

[pytest]
filterwarnings =
    ignore::DeprecationWarning

11
Modüle göre filtrelemek için bir normal ifade kullanırsınız. Örnek tüm sqlalchemy modüllerden deprecation uyarıları görmezden:ignore::DeprecationWarning:sqlalchemy.*:
colini

@colini, -W bayrağına bir argüman olarak benim için başarısız oldu, ancak pytest.ini dosyamda benim için çalıştı.
WhiteHotLoveTiger

10

Pytest.ini dosyasında şunları ekleyebilirsiniz:

[pytest]
addopts = -p no:warnings

VEYA komut satırında satırın altından geçme. Test paketleriniz uyarıları harici bir sistem kullanarak işliyorsa bu yararlı olabilir.

-p no: uyarılar

VEYA yalnızca belirli bir kullanımdan kaldırılmış uyarıyı gizlemek istiyorsanız, aşağıdaki ifadeyi pytest.ini dosyanıza ekleyin

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

Bu, mesaj başlangıcının ". * U. * modu kullanımdan kaldırıldı" normal ifadesiyle eşleştiği DeprecationWarning türündeki tüm uyarıları yoksayacaktır.

VEYA Önerilmese de,

--disable-uyarılar

uyarı özetini tamamen test çalıştırma çıktısından bastırmak için komut satırı seçeneği.


5

Tüm uyarıları gizlemek istemiyorum, bu yüzden bunu koydum pytest.ini

[pytest]
filterwarnings =
    ignore::DeprecationWarning
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.