Есть ли способ подавить внутренние предупреждения об устаревании 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
Есть ли способ отключить эти предупреждения?
pytest -p no:warnings
или добавьте в pytest.ini или tox.ini следующее:Результат будет зеленым без каких-либо предупреждений. См. Документацию по адресу https://docs.pytest.org/en/latest/warnings.html#disables-warnings-summary .
Это может быть допустимым вариантом использования набора тестов, в котором вы хотите получить чистый вывод.
Помните, что постоянное скрытие всех предупреждений может привести к тому, что вы пропустите важные предупреждения. Если вы хотите скрыть только определенные предупреждения, посмотрите ответ Cloc .
источник
addopts = -p no:warnings
ДЕЙСТВИТЕЛЬНО ПЛОХАЯ идея, и решение CloC намного разумнее, но мне пришлось использовать вашу, когдаignore::InsecureRequestWarning
не был распознан, так что вы тоже получите +1Я думаю, вы хотите скрывать не все предупреждения, а только те, которые не имеют отношения к делу. И в этом случае предупреждения об удалении из импортированных модулей python.
Прочтите документацию pytest о Warnings Capture :
Таким образом, вы можете фильтровать предупреждения с помощью
-W
опции python !Кажется, что
pytest
полностью удаляет фильтры, потому что он показывает все ихDeprecationWarning
при запуске, а документация Python о фильтрах предупреждений по умолчанию четко говорит:Итак, в вашем случае, если вы хотите, скажем, отфильтровать типы предупреждений, которые вы хотите игнорировать, например, те
DeprecationWarning
, просто запустите команду pytest с-W
параметром:РЕДАКТИРОВАТЬ : из комментария colini можно фильтровать по модулю. Пример игнорирования предупреждений об устаревании от всей sqlalchemy:
Затем вы можете перечислить установленные модули, которые создают слишком много шума на выходе
pytest
Используйте с файлом, а не в командной строке:
Вы можете указать эти фильтры в файле pytest.ini:
источник
ignore::DeprecationWarning:sqlalchemy.*:
В файле pytest.ini вы можете добавить:
ИЛИ переходя под строку в командной строке. Это может быть полезно, если ваши тестовые наборы обрабатывают предупреждения с помощью внешней системы.
ИЛИ, если вы хотите скрыть только какое-то конкретное устаревшее предупреждение, добавьте инструкцию ниже в файл pytest.ini
[pytest] filterwarnings = ignore:.*U.*mode is deprecated:DeprecationWarning
При этом игнорируются все предупреждения типа DeprecationWarning, где начало сообщения соответствует регулярному выражению «. * U. * mode is deprecated».
ИЛИ Хотя это не рекомендуется, вы можете использовать
параметр командной строки, чтобы полностью исключить сводку предупреждений из выходных данных тестового запуска.
источник
Я не хочу скрывать все предупреждения, поэтому вставил это
pytest.ini
источник