कैसे py.test आंतरिक वियोग चेतावनी को दबाने के लिए


94

क्या पाइस्टेस्ट की आंतरिक अपवर्तन चेतावनी को दबाने का कोई तरीका है?

प्रसंग: मैं से टेस्ट स्वीट पोर्टिंग की कठिनाई का मूल्यांकन करने के लिए देख रहा हूँ noseकरने के लिए pytest। सुइट काफी बड़ा है और भारी उपयोग nose-स्टाइल yieldआधारित परीक्षण जनरेटर है।

मैं पहले यह सुनिश्चित करना चाहता हूं कि मौजूदा परीक्षण पाइटेस्ट के साथ पास हों, और फिर शायद परीक्षण जनरेटर को बदल दें parameterized

बस $ pytest path-to-test-folderpytest 3.0.4 के साथ चल रहा है पूरी तरह से पृष्ठों और के पन्नों पर हावी है

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

क्या इन चेतावनियों को बंद करने का कोई तरीका है?

जवाबों:


85

से pytest --help:

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

4
जैसा कि सहायता पाठ कहता है, यह केवल पाठ सारांश को छोड़ देगा। परिणाम अभी भी पीला होगा और दिखाएगा कि चेतावनी हैं।
डेविड पियर्सन

Pytest.ini फ़ाइल में डालने के लिए बेहतर है, जैसा कि नीचे दिखाया गया है।
vy32

93

pytest -p no:warnings, या अपने pytest.ini या tox.ini में निम्नलिखित जोड़ें:

[pytest]
addopts = -p no:warnings

चेतावनी के किसी भी संकेत के बिना परिणाम हरा होगा। पर दस्तावेज़ देखें https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary

यह एक परीक्षण सूट के लिए एक वैध उपयोग मामला हो सकता है जहां आप स्वच्छ आउटपुट चाहते हैं।

इस बात से अवगत रहें कि हमेशा सभी चेतावनियों को छिपाने से आपको महत्वपूर्ण चेतावनियाँ याद आ सकती हैं। यदि आप केवल विशिष्ट चेतावनियाँ छिपाना चाहते हैं, तो क्लोक के उत्तर को देखें


2
addopts = -p no:warningsवास्तव में बुरा विचार है, और CloC समाधान बहुत साफ है, लेकिन मैं तुम्हारा इस्तेमाल किया ignore::InsecureRequestWarningथा जब मान्यता प्राप्त नहीं था, तो आप +1 भी मिलता है
पीटर एम -

सभी चेतावनियों को स्थायी रूप से अक्षम करना (अर्थात pytest.ini का उपयोग करना) लगभग एक अच्छा विचार नहीं है। क्लॉक वर्णन के अनुसार सिर्फ डिप्रेसेशन चेतावनी (और मॉड्यूल द्वारा) को अक्षम करना ऐसा करने का सही तरीका है।
नवविवाहिता

71

मुझे लगता है कि आप सभी चेतावनियों को छिपाना नहीं चाहते हैं, लेकिन सिर्फ वही जो प्रासंगिक नहीं हैं। और इस मामले में, आयातित अजगर मॉड्यूल से चेतावनी चेतावनी।

चेतावनियों पर कब्जा करने के बारे में कई दस्तावेज़ों को पढ़ने के बाद :

दोनों -W कमांड-लाइन विकल्प और फ़िल्टररिंग इनआई विकल्प पायथन के अपने- डब्ल्यू विकल्प और चेतावनियों पर आधारित हैं । इसलिए, कृपया अन्य उदाहरणों और उन्नत उपयोग के लिए पायथन प्रलेखन में उन वर्गों को देखें।

तो आप अजगर के -Wविकल्प के साथ चेतावनी को फ़िल्टर कर सकते हैं !

ऐसा लगता है कि pytestफिल्टर को पूरी तरह से हटा देता है, क्योंकि यह उन सभी को दिखाता है DeprecationWarningजब चल रहा है, और डिफ़ॉल्ट चेतावनी फिल्टर के बारे में पायथन के दस्तावेज स्पष्ट रूप से कहते हैं:

नियमित रिलीज़ बिल्ड में, डिफ़ॉल्ट चेतावनी फ़िल्टर में निम्न प्रविष्टियाँ होती हैं (पूर्ववर्ती क्रम में):

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

तो आपके मामले में, यदि आप चाहते हैं कि आप उन प्रकार की चेतावनी को फ़िल्टर करने के लिए कहें जिन्हें आप अनदेखा करना चाहते हैं, जैसे कि DeprecationWarning, तो बस -Wविकल्प के लिए pytest कमांड चलाएं :

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

EDIT : कॉलिनी की टिप्पणी से, मॉड्यूल द्वारा फ़िल्टर करना संभव है। सभी sqlalchemy से पदावनति चेतावनियों को अनदेखा करने के लिए उदाहरण:

ignore::DeprecationWarning:sqlalchemy.*:

फिर आप अपने स्थापित मॉड्यूल को सूचीबद्ध कर सकते हैं जो के आउटपुट में बहुत अधिक शोर पैदा करता है pytest

कमांड लाइन के बजाय फाइल के साथ प्रयोग करें:

आप उन फिल्टर को pytest.ini फ़ाइल में सूचीबद्ध करना पसंद कर सकते हैं:

[pytest]
filterwarnings =
    ignore::DeprecationWarning

9
मॉड्यूल पर फ़िल्टर करने के लिए आप एक रेगेक्स का उपयोग करते हैं। उदाहरण के लिए सभी sqlalchemy मॉड्यूल से ignore::DeprecationWarning:sqlalchemy.*:
पदावनति

@ कोलिनी जो मेरे लिए -W ध्वज के तर्क के रूप में विफल रही, लेकिन इसने मेरे लिए मेरी pytest.ini फ़ाइल में काम किया।
व्हाइटहोटलवॉइगर

6

Pytest.ini फ़ाइल में आप जोड़ सकते हैं:

[pytest]
addopts = -p no:warnings

या कमांड-लाइन में नीचे लाइन से गुजरना। यह तब उपयोगी हो सकता है जब आपका परीक्षण सूट एक बाहरी प्रणाली का उपयोग करके चेतावनियों को संभालता है।

-प न: चेतावनी

या यदि आप केवल कुछ विशिष्ट पदच्युत चेतावनी को छिपाना चाहते हैं, तो आप pytest.ini फ़ाइल में नीचे विवरण जोड़ें

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

यह सभी प्रकार की चेतावनियों को अनदेखा कर देगा, जहां डिप्रेशन का संदेश नियमित अभिव्यक्ति से शुरू होता है "। * यू। * मोड को हटा दिया जाता है"।

या यद्यपि अनुशंसित नहीं है, आप इसका उपयोग कर सकते हैं

--disable-चेतावनी

कमांड-लाइन विकल्प पूरी तरह से परीक्षण रन आउटपुट से चेतावनी सारांश को दबाने के लिए।


5

मैं सभी चेतावनी को छिपाना नहीं चाहता, इसलिए मैंने इसे रखा pytest.ini

[pytest]
filterwarnings =
    ignore::DeprecationWarning
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.