Как подавить внутренние предупреждения об отказе от py.test

Есть ли способ подавить внутренние предупреждения об отказе pytest?

Контекст: Я хочу оценить сложность переноса тестового набора с nose на pytest. Набор довольно большой и в значительной степени использует генераторы тестов nose -style 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

Есть ли способ отключить эти предупреждения?

Ответ 1

От pytest --help:

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

Ответ 2

pytest -p no:warnings, или добавьте следующее в свой pytest.ini или tox.ini:

[pytest]
addopts = -p no:warnings

Результат будет зеленым без каких-либо предупреждений. См. документацию на https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary.

Имейте в виду, что всегда скрывая все предупреждения, вы можете пропустить важные предупреждения.
Если вы хотите скрыть только определенные предупреждения, посмотрите ответ Cloc.

Ответ 3

Я думаю, вы не хотите скрывать все предупреждения, а только те, которые не имеют отношения. И в этом случае предупреждения об удалении из импортированных модулей Python.

Ознакомиться с документацией по pytest о захвате предупреждений:

И параметр командной строки -W, и параметр ini filterwarnings основаны на собственных параметрах Python -W и warnings.simplefilter, поэтому обратитесь к этим разделам в документации по Python для получения информации о других примеры и расширенное использование.

Таким образом, вы можете фильтровать предупреждения с помощью опции python -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

Ответ 4

Я не хочу скрывать все предупреждения, поэтому я поместил это в pytest.ini

[pytest]
filterwarnings =
    ignore::DeprecationWarning