วิธีระงับคำเตือนการเลิกใช้งานภายใน py.test


98

มีวิธีระงับคำเตือนการเลิกใช้งานภายในของ pytest หรือไม่?

บริบท: ฉันกำลังมองหาในการประเมินความยากลำบากในการย้ายชุดทดสอบจากไปnose pytestชุดนี้มีขนาดค่อนข้างใหญ่และใช้เครื่องกำเนิดไฟฟ้าทดสอบตามnoseสไตล์อย่างมากyield

ผมอยากจะทำให้เป็นครั้งแรกแน่ใจว่าที่มีอยู่การทดสอบผ่านกับ pytest parameterizedแล้วอาจจะเปลี่ยนเครื่องกำเนิดไฟฟ้าทดสอบเพื่อ

เพียงแค่รัน$ pytest path-to-test-folderด้วย pytest 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

มีวิธีปิดคำเตือนเหล่านี้หรือไม่?

คำตอบ:


93

จากpytest --help:

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

4
ตามที่ข้อความช่วยเหลือระบุไว้สิ่งนี้จะไม่รวมเฉพาะสรุปที่เป็นข้อความเท่านั้น ผลจะยังคงเป็นสีเหลืองและแสดงว่ามีคำเตือน
David Pärsson

ดีกว่าใส่ไฟล์ pytest.ini ดังที่แสดงด้านล่าง
vy32

96

pytest -p no:warningsหรือเพิ่มสิ่งต่อไปนี้ใน pytest.ini หรือ tox.ini ของคุณ:

[pytest]
addopts = -p no:warnings

ผลจะเป็นสีเขียวโดยไม่มีสัญญาณเตือนใด ๆ ดูเอกสารประกอบที่https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary

นี่อาจเป็นกรณีการใช้งานที่ถูกต้องสำหรับชุดทดสอบที่คุณต้องการเอาต์พุตที่สะอาด

โปรดทราบว่าการซ่อนคำเตือนทั้งหมดไว้เสมออาจทำให้คุณพลาดคำเตือนที่สำคัญ หากคุณต้องการที่จะซ่อนเพียงคำเตือนเฉพาะดูที่คำตอบของ Cloc


2
addopts = -p no:warningsเป็นความคิดที่ไม่ดีจริงๆและวิธีแก้ปัญหา CloC นั้นดีกว่ามาก แต่ฉันต้องใช้ของคุณเมื่อignore::InsecureRequestWarningไม่เป็นที่รู้จักดังนั้นคุณจะได้รับ +1 ด้วยเช่นกัน
Peter M. - ย่อมาจาก Monica

การปิดคำเตือนทั้งหมดอย่างต่อเนื่อง (เช่นการใช้ pytest.ini) แทบจะไม่ใช่ความคิดที่ดีเลย การปิดใช้งานคำเตือนการเลิกใช้งาน (และตามโมดูล) ตามที่ CloC อธิบายเป็นวิธีที่ถูกต้องในการดำเนินการนี้
Neowizard

74

ฉันคิดว่าคุณไม่ต้องการซ่อนคำเตือนทั้งหมด แต่เป็นเพียงคำเตือนที่ไม่เกี่ยวข้อง และในกรณีนี้คำเตือนการปรับเปลี่ยนจากโมดูล python ที่นำเข้า

การอ่านเอกสาร pytest เกี่ยวกับการจับคำเตือน :

ทั้งอ็อพชันบรรทัดคำสั่ง -W และอ็อพชัน filterwarnings ini ขึ้นอยู่กับอ็อพชัน -Wและคำเตือนของ Python เองดังนั้นโปรดดูส่วนเหล่านั้นในเอกสาร Python สำหรับตัวอย่างอื่น ๆ และการใช้งานขั้นสูง

ดังนั้นคุณสามารถกรองคำเตือนด้วย python's -Wตัวเลือก !

ดูเหมือนว่าpytestจะลบตัวกรองออกอย่างสมบูรณ์เนื่องจากแสดงสิ่งเหล่านั้นทั้งหมดDeprecationWarningเมื่อทำงานและเอกสารของ Python เกี่ยวกับตัวกรองคำเตือนเริ่มต้นระบุไว้อย่างชัดเจนว่า:

ในการสร้างรุ่นปกติตัวกรองคำเตือนเริ่มต้นมีรายการต่อไปนี้ (ตามลำดับความสำคัญ):

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

ดังนั้นในกรณีของคุณหากคุณต้องการให้พูดกรองประเภทของคำเตือนที่คุณต้องการละเว้นเช่นคำเตือนเหล่านั้นDeprecationWarningให้เรียกใช้คำสั่ง pytest ด้วย-Wตัวเลือก:

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

แก้ไข : จากความคิดเห็นของcoliniเป็นไปได้ที่จะกรองตามโมดูล ตัวอย่างการละเว้นคำเตือนการเลิกใช้งานจาก sqlalchemy ทั้งหมด:

ignore::DeprecationWarning:sqlalchemy.*:

จากนั้นคุณสามารถแสดงรายการโมดูลที่ติดตั้งซึ่งสร้างสัญญาณรบกวนมากเกินไปในเอาต์พุตของไฟล์ pytest

ใช้กับไฟล์มากกว่าในบรรทัดคำสั่ง:

คุณอาจต้องการแสดงรายการตัวกรองเหล่านั้นในไฟล์ pytest.ini:

[pytest]
filterwarnings =
    ignore::DeprecationWarning

11
ในการกรองโมดูลคุณใช้ regex ตัวอย่างการละเว้นคำเตือนการเลิกใช้งานจากโมดูล sqlalchemy ทั้งหมด:ignore::DeprecationWarning:sqlalchemy.*:
colini

@colini ที่ล้มเหลวสำหรับฉันในฐานะอาร์กิวเมนต์สำหรับแฟล็ก -W แต่ใช้ได้กับฉันในไฟล์ pytest.ini ของฉัน
WhiteHotLoveTiger

10

ในไฟล์ pytest.ini คุณสามารถเพิ่ม:

[pytest]
addopts = -p no:warnings

หรือผ่านบรรทัดด้านล่างในบรรทัดคำสั่ง สิ่งนี้อาจมีประโยชน์หากชุดทดสอบของคุณจัดการคำเตือนโดยใช้ระบบภายนอก

-p no: คำเตือน

หรือหากคุณต้องการซ่อนคำเตือนที่เลิกใช้งานเฉพาะบางส่วนให้เพิ่มคำสั่งด้านล่างในไฟล์ pytest.ini ของคุณ

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

สิ่งนี้จะไม่สนใจคำเตือนทั้งหมดของประเภท DeprecationWarning ที่จุดเริ่มต้นของข้อความตรงกับนิพจน์ทั่วไป ". * U. * mode is deprecated"

หรือแม้ว่าจะไม่แนะนำ แต่คุณสามารถใช้ไฟล์

- คำเตือนปิดการใช้งาน

ตัวเลือกบรรทัดคำสั่งเพื่อระงับการสรุปคำเตือนทั้งหมดจากเอาต์พุตการทดสอบการรัน


5

ฉันไม่ต้องการซ่อนคำเตือนทั้งหมดก็เลยใส่ไว้ pytest.ini

[pytest]
filterwarnings =
    ignore::DeprecationWarning
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.