pytest - подавить предупреждение об устаревании от определенных сторонних модулей - PullRequest
2 голосов
/ 15 октября 2019

Когда я запускаю pytest, я получаю некоторые предупреждения об устаревании из сторонней библиотеки. Я хотел бы получать информацию о любых предупреждениях об устаревании в моем собственном коде, но не в продаваемой копии библиотеки, связанной с другой сторонней библиотекой.

Этот ответ был полезен вотвезти меня туда. Если я запускаю pytest так: $ pytest ./tests/ Я получаю:

$ pytest ./tests/
============================= test session starts ==============================
platform linux -- Python 3.7.4, pytest-5.2.1, py-1.8.0, pluggy-0.13.0
rootdir: /home/whlt/repos/tj-image-resizer/tests, inifile: pytest.ini
collected 5 items                                                              

tests/test_file1.py .                                                   [ 20%]
tests/test_file2.py ....                                                [100%]

=============================== warnings summary ===============================
/home/whlt/.local/lib/python3.7/site-packages/botocore/vendored/requests/packages/urllib3/_collections.py:1
/home/whlt/.local/lib/python3.7/site-packages/botocore/vendored/requests/packages/urllib3/_collections.py:1
  /home/whlt/.local/lib/python3.7/site-packages/botocore/vendored/requests/packages/urllib3/_collections.py:1: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
    from collections import Mapping, MutableMapping

-- Docs: https://docs.pytest.org/en/latest/warnings.html
======================== 5 passed, 2 warnings in 2.54s =========================

, но если я запускаю Pytest так: $ pytest ./tests/ -W ignore::DeprecationWarning Я получаю:

============================= test session starts ==============================
platform linux -- Python 3.7.4, pytest-5.2.1, py-1.8.0, pluggy-0.13.0
rootdir: /home/whlt/repos/tj-image-resizer/tests, inifile: pytest.ini
collected 5 items                                                              

tests/test_file1.py .                                                   [ 20%]
tests/test_file2.py ....                                                [100%]

============================== 5 passed in 2.61s ===============================

Этот второй вывод показывает мнеэтот фильтр работает, но он также скрывает любые предупреждения об устаревании, которые я хотел бы видеть в результате моего собственного кода.

Часть этой проблемы заключается в том, что я не уверен, какой модуль пытаться ссылаться в игнорируемомфильтр. Я пробовал $ pytest ./tests/ -W ignore::DeprecationWarning:urllib3.*: и пробовал $ pytest ./tests/ -W ignore::DeprecationWarning:botocore.*:. Оба эти результата приводят к тому же выводу, что и в первом примере, без фильтрации.

Как отфильтровать DeprecationWarnings из версии urllib3, поставляемой с продаваемой версией requests, включенной с botocore (который вызывается, когда я запускаю команды с библиотекой boto3)?

1 Ответ

3 голосов
/ 15 октября 2019

Вы должны использовать опции фильтров предупреждений (ini или mark):

[pytest]
filterwarnings =
    ignore::DeprecationWarning:botocore.*:

Источник: https://docs.python.org/3/library/warnings.html#default-warning-filter

"Фильтры отдельных предупреждений указываются в виде последовательности полей, разделенных двоеточиями: "

action:message:category:module:line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...