Подавление внутренних предупреждений pytest при миграции с nose
Быстрый ответ
Тесты можно защитить от назойливых уведомлений об устаревании в py.test простым образом: используйте команду pytest -W ignore::DeprecationWarning или добавьте ignore::DeprecationWarning в секцию filterwarnings файла pytest.ini.
В командной строке это выглядит так:
pytest -W ignore::DeprecationWarning
А в файле pytest.ini вот таким образом:
[pytest]
filterwarnings = ignore::DeprecationWarning
Однако существуют и другие способы более тонкого контроля над системой предупреждений Python для поддержания чистоты вашего тестового вывода.

Расширение возможностей через командную строку
Если у вас возникли проблемы с чрезмерными предупреждениями, вот несколько приемов для устранения этого:
Опция -W
С помощью команды -W можно добавлять фильтры для предупреждений прямо из командной строки, аналогично их добавлению в файл pytest.ini:
pytest -W ignore::UserWarning -W ignore::RuntimeWarning
Полное отключение предупреждений pytest
Чтобы полностью отключить вывод предупреждений pytest, используйте следующую команду:
pytest --disable-pytest-warnings
Отключение предупреждений для конкретных модулей
Если определенные модули избыточно "активны", используйте следующий формат команды:
pytest -W ignore::DeprecationWarning:noise_maker.*
Настройка с помощью pytest.ini
Для более тонкой настройки используйте файл pytest.ini, здесь вам может пригодиться знание регулярных выражений:
[pytest]
filterwarnings =
ignore::DeprecationWarning:noise_maker.*:
default::UserWarning:another_module.*
Не забудьте обновлять фильтры в файле pytest.ini в соответствии с текущим состоянием вашего кода.
Опция -p no:warnings
Добавление в pytest.ini опции -p no:warnings или в аргумент addopts позволяет подавить все предупреждения:
[pytest]
addopts = -p no:warnings
Обратите внимание на важные предупреждения
Не игнорируйте предупреждения, которые могут указывать на значимые изменения в библиотеках, от которых зависит ваш проект. Регулярно проверяйте список подавляемых предупреждений.
Визуализация
Представьте, что ваша консоль с предупреждениями – это шумный концерт, а вы надели наушники с шумоподавлением:
📢🔊🔊🔊📢
📢⚠️🔊⚠️📢
🎧 📢🔊🔊🔊📢 🎧
🎧👩💻- "Ах, сладость тишины..." 👨💻🎧
📢🛑⛔🛑📢
📢🔇🔇🔇📢
С правильно настроенным pytest.ini, тестовый вывод становится спокойным и тихим:
[pytest]
filterwarnings =
ignore::DeprecationWarning
Наслаждайтесь тишиной во время тестирования. 🎶👩💻
Полезные материалы
Погрузимся в полезные приемы и реальные примеры работы с предупреждениями:
Сценарии для CI/CD: контролируем предупреждения
В CI/CD-пайплайнах часто требуется скрыть предупреждения, оставив их видимыми только во время локальной разработки. Используйте для этого переменные окружения в pytest.ini:
[pytest]
filterwarnings =
ignore::DeprecationWarning if 'CI' in os.environ
Борьба со сторонними библиотеками
Подавляйте предупреждения только от шумных сторонних библиотек:
[pytest]
filterwarnings =
ignore::DeprecationWarning:problematic_module.*
Отладка и временное включение предупреждений
Если необходимо временно активировать предупреждения во время отладки, просто закомментируйте соответствующие строки в pytest.ini или удалите их.
Логирование предупреждений
Следите за предупреждениями, сохраняя их в отдельный лог-файл, чтобы они не отвлекали вас в терминале:
import logging
import warnings
logging.captureWarnings(True)
warnings.filterwarnings('default', category=DeprecationWarning, module='myapp')
logger = logging.getLogger('py.warnings')
handler = logging.FileHandler('warnings.log')
logger.addHandler(handler)
Полезные материалы
- Документация pytest: Как захватывать предупреждения: детальное рассмотрение захвата и подавления предупреждений.
- Руководство по настройке pytest для фильтрации предупреждений: тонкости работы с фильтрами предупреждений.
- Официальная документация Python по модулю warnings: инструкция по работе с предупреждениями.
- Обсуждение на Stack Overflow: Как отключить предупреждения в Python: полезные советы от сообщества разработчиков.
- Страница проблем проекта pytest на GitHub: следите за актуальными задачами и проблемами.
- Использование системы логирования Python с предупреждениями: интеграция логирования и предупреждений.
- PEP 565 — Показ предупреждений об устаревании в основном коде: изменения в системе предупреждений Python.


