Подавление внутренних предупреждений 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.