ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Подавление внутренних предупреждений pytest при миграции с nose

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Тесты можно защитить от назойливых уведомлений об устаревании в py.test простым образом: используйте команду pytest -W ignore::DeprecationWarning или добавьте ignore::DeprecationWarning в секцию filterwarnings файла pytest.ini.

В командной строке это выглядит так:

pytest -W ignore::DeprecationWarning

А в файле pytest.ini вот таким образом:

[pytest]
filterwarnings = ignore::DeprecationWarning

Однако существуют и другие способы более тонкого контроля над системой предупреждений Python для поддержания чистоты вашего тестового вывода.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Расширение возможностей через командную строку

Если у вас возникли проблемы с чрезмерными предупреждениями, вот несколько приемов для устранения этого:

Опция -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

Обратите внимание на важные предупреждения

Не игнорируйте предупреждения, которые могут указывать на значимые изменения в библиотеках, от которых зависит ваш проект. Регулярно проверяйте список подавляемых предупреждений.

Визуализация

Представьте, что ваша консоль с предупреждениями – это шумный концерт, а вы надели наушники с шумоподавлением:

Markdown
Скопировать код
              📢🔊🔊🔊📢
              📢⚠️🔊⚠️📢
   🎧        📢🔊🔊🔊📢         🎧
   🎧👩‍💻- "Ах, сладость тишины..." 👨‍💻🎧
              📢🛑⛔🛑📢
              📢🔇🔇🔇📢

С правильно настроенным pytest.ini, тестовый вывод становится спокойным и тихим:

ini
Скопировать код
[pytest]
filterwarnings =
    ignore::DeprecationWarning

Наслаждайтесь тишиной во время тестирования. 🎶👩‍💻

Полезные материалы

Погрузимся в полезные приемы и реальные примеры работы с предупреждениями:

Сценарии для CI/CD: контролируем предупреждения

В CI/CD-пайплайнах часто требуется скрыть предупреждения, оставив их видимыми только во время локальной разработки. Используйте для этого переменные окружения в pytest.ini:

ini
Скопировать код
[pytest]
filterwarnings =
    ignore::DeprecationWarning if 'CI' in os.environ

Борьба со сторонними библиотеками

Подавляйте предупреждения только от шумных сторонних библиотек:

ini
Скопировать код
[pytest]
filterwarnings =
    ignore::DeprecationWarning:problematic_module.*

Отладка и временное включение предупреждений

Если необходимо временно активировать предупреждения во время отладки, просто закомментируйте соответствующие строки в pytest.ini или удалите их.

Логирование предупреждений

Следите за предупреждениями, сохраняя их в отдельный лог-файл, чтобы они не отвлекали вас в терминале:

Python
Скопировать код
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)

Полезные материалы

  1. Документация pytest: Как захватывать предупреждения: детальное рассмотрение захвата и подавления предупреждений.
  2. Руководство по настройке pytest для фильтрации предупреждений: тонкости работы с фильтрами предупреждений.
  3. Официальная документация Python по модулю warnings: инструкция по работе с предупреждениями.
  4. Обсуждение на Stack Overflow: Как отключить предупреждения в Python: полезные советы от сообщества разработчиков.
  5. Страница проблем проекта pytest на GitHub: следите за актуальными задачами и проблемами.
  6. Использование системы логирования Python с предупреждениями: интеграция логирования и предупреждений.
  7. PEP 565 — Показ предупреждений об устаревании в основном коде: изменения в системе предупреждений Python.