Логирование — важный аспект любой системы или приложения. Это позволяет отслеживать и анализировать действия, происходящие в вашем коде. В контексте тестирования это становится особенно важным, так как можно отследить, какие именно шаги или операции были выполнены до возникновения ошибки.
В Python для логирования существует встроенный модуль logging. pytest умеет работать с этим модулем, делая логи доступными при проведении тестов.
Для начала, вам нужно будет настроить логирование в вашем коде или тесте:
import logging
def function_that_logs():
logging.warning("Это предупреждение!")
logging.error("Это ошибка!")
По умолчанию, при выполнении pytest логи не отображаются. Чтобы увидеть их, используйте флаг -l
или --log-cli-level
.
pytest --log-cli-level=INFO
Это покажет все логи уровня INFO и выше (WARNING, ERROR и т. д.).
pytest также позволяет настроить форматирование логов и их местоположение. Например, чтобы записать логи в файл, вы можете использовать:
pytest --log-file=logfile.txt
А для настройки формата:
pytest --log-cli-format="%(asctime)s - %(levelname)s - %(message)s"
pytest позволяет устанавливать разные уровни логирования для разных модулей:
pytest --log-cli-level=INFO --log-cli-level=tests.my_module=DEBUG
Таким образом, основной уровень логирования будет INFO, но для модуля tests.my_module будет использоваться уровень DEBUG
.
pytest захватывает логи во время выполнения каждого теста. Это позволяет вам видеть логи только для конкретных тестов, что может быть очень полезно при диагностике проблемы:
def test_log_captured():
logging.info("Это сообщение будет захвачено и отображено только при ошибке в этом тесте.")
Если этот тест проходит, вы не увидите сообщение. Однако если тест завершится неудачей, pytest покажет все захваченные логи, что помогает понять контекст ошибки.
Иногда захват логов может мешать, особенно если вы используете логирование для дебаггинга во время разработки. Вы можете отключить захват логов с помощью флага --no-log-capture
:
pytest --no-log-capture
Используя логирование в своих фикстурах, вы можете легко отслеживать их выполнение и возможные проблемы:
import pytest
@pytest.fixture
def my_fixture():
logging.info("Начало выполнения фикстуры")
yield
logging.info("Конец выполнения фикстуры")
Это позволит видеть, когда начинается и завершается каждая фикстура.
Помимо стандартного модуля logging, существуют и другие популярные инструменты логирования, такие как Loguru или Sentry. pytest обычно хорошо интегрируется с этими инструментами, и вы можете использовать их возможности вместе с возможностями логирования pytest.
Логирование является ценным инструментом не только для отладки, но и для понимания происходящих в системе процессов. Комбинируя мощь pytest с продвинутыми инструментами логирования, разработчики могут значительно повысить качество своего кода и упростить процесс нахождения и исправления ошибок.
Содержание: