Cách ngăn chặn cảnh báo ngừng sử dụng py.test nội bộ


94

Có cách nào để ngăn chặn các cảnh báo không dùng đến nội bộ của pytest không?

Bối cảnh: Tôi đang tìm cách đánh giá độ khó của việc chuyển một bộ thử nghiệm từ nosesang pytest. Bộ phần mềm này khá lớn và sử dụng nhiều trình tạo thử nghiệm dựa trên nosekiểu yield.

Trước tiên, tôi muốn đảm bảo rằng các bài kiểm tra hiện có vượt qua bằng pytest và sau đó có thể thay đổi bộ tạo kiểm tra thành parameterized.

Chỉ chạy $ pytest path-to-test-foldervới pytest 3.0.4 hoàn toàn bị chi phối bởi các trang và các trang của

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

Có cách nào để tắt các cảnh báo này không?

Câu trả lời:


85

Từ pytest --help:

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

4
Như văn bản trợ giúp cho biết, điều này sẽ chỉ bỏ qua phần tóm tắt văn bản. Kết quả sẽ vẫn là màu vàng và cho thấy rằng có cảnh báo.
David Pärsson

Tốt hơn nên đưa vào tệp pytest.ini, như hình dưới đây.
vy32

93

pytest -p no:warningshoặc thêm phần sau vào pytest.ini hoặc tox.ini của bạn:

[pytest]
addopts = -p no:warnings

Kết quả sẽ có màu xanh lục mà không có bất kỳ dấu hiệu cảnh báo nào. Xem tài liệu tại https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary .

Đây có thể là một trường hợp sử dụng hợp lệ cho một bộ thử nghiệm mà bạn muốn đầu ra sạch.

Cần biết rằng việc luôn ẩn tất cả các cảnh báo có thể khiến bạn bỏ lỡ các cảnh báo quan trọng. Nếu bạn chỉ muốn ẩn các cảnh báo cụ thể, hãy xem câu trả lời của Cloc .


2
addopts = -p no:warningslà ý tưởng thực sự xấu, và CloC giải pháp là nhiều saner, nhưng tôi đã phải sử dụng của bạn khi ignore::InsecureRequestWarningkhông được công nhận, vì vậy bạn sẽ có được 1 quá
Peter M. - là viết tắt của Monica

Vô hiệu hóa tất cả các cảnh báo liên tục (tức là sử dụng pytest.ini) hầu như không bao giờ là một ý kiến ​​hay. Chỉ vô hiệu hóa cảnh báo không dùng nữa (và theo mô-đun) như CloC mô tả là cách phù hợp để thực hiện việc này.
Neowizard

71

Tôi nghĩ rằng bạn không muốn ẩn tất cả các cảnh báo, nhưng chỉ những cảnh báo không liên quan. Và trong trường hợp này, các cảnh báo về việc sửa lỗi từ các mô-đun python đã nhập.

Đã đọc tài liệu pytest về Chụp cảnh báo :

Cả hai tùy chọn dòng lệnh -W và filterwarnings tùy chọn ini được dựa trên riêng của Python tùy chọn -Wwarnings.simplefilter , vì vậy hãy tham khảo những phần trong tài liệu Python cho ví dụ khác và sử dụng tiên tiến.

Vì vậy, bạn có thể lọc các cảnh báo với -Wtùy chọn của python !

Dường như pytestloại bỏ hoàn toàn các bộ lọc, vì nó hiển thị tất cả những bộ lọc đó DeprecationWarningkhi chạy và tài liệu của Python về Bộ lọc Cảnh báo Mặc định cho biết rõ ràng:

Trong các bản dựng phát hành thông thường, bộ lọc cảnh báo mặc định có các mục sau (theo thứ tự ưu tiên):

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

Vì vậy, trong trường hợp của bạn, nếu bạn muốn cho phép lọc các loại cảnh báo mà bạn muốn bỏ qua, chẳng hạn như những cảnh báo đó DeprecationWarning, chỉ cần chạy lệnh pytest với -Wtùy chọn:

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

CHỈNH SỬA : Từ bình luận của colini , có thể lọc theo mô-đun. Ví dụ để bỏ qua cảnh báo không dùng nữa từ tất cả sqlalchemy:

ignore::DeprecationWarning:sqlalchemy.*:

Sau đó, bạn có thể liệt kê các mô-đun đã cài đặt của mình tạo ra quá nhiều tiếng ồn trong đầu ra của pytest

Sử dụng với tệp thay vì trong dòng lệnh:

Bạn có thể thích liệt kê các bộ lọc đó trong tệp pytest.ini:

[pytest]
filterwarnings =
    ignore::DeprecationWarning

9
Để lọc trên mô-đun, bạn sử dụng regex. Ví dụ để bỏ qua cảnh báo deprecation từ tất cả các module SQLAlchemy:ignore::DeprecationWarning:sqlalchemy.*:
colini

@colini không thành công đối với tôi khi đối số với cờ -W, nhưng nó hoạt động với tôi trong tệp pytest.ini của tôi.
WhiteHotLoveTiger

6

Trong tệp pytest.ini, bạn có thể thêm:

[pytest]
addopts = -p no:warnings

HOẶC chuyển dòng dưới đây trong dòng lệnh. Điều này có thể hữu ích nếu bộ thử nghiệm của bạn xử lý cảnh báo bằng hệ thống bên ngoài.

-p không: cảnh báo

HOẶC nếu bạn chỉ muốn ẩn một số cảnh báo cụ thể không dùng nữa, hãy thêm câu lệnh bên dưới trong tệp pytest.ini của bạn

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

Điều này sẽ bỏ qua tất cả các cảnh báo thuộc loại DeprecationWarning trong đó phần bắt đầu của thông báo khớp với biểu thức chính quy ". * Chế độ U. * không được dùng nữa".

HOẶC Mặc dù không được khuyến khích, bạn có thể sử dụng

- cảnh báo vô hiệu hóa

tùy chọn dòng lệnh để loại bỏ hoàn toàn tóm tắt cảnh báo từ đầu ra chạy thử nghiệm.


5

Tôi không muốn ẩn tất cả cảnh báo, vì vậy tôi đưa nó vào pytest.ini

[pytest]
filterwarnings =
    ignore::DeprecationWarning
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.