Как проверить записи logging через caplog в pytest

Как проверить записи logging через caplog в pytest
Содержание статьи

Если тест должен проверить запись logging, используйте фикстуру caplog. Она даёт доступ к уровню, имени логгера и сообщению. В примере Mentoring.digital проверяется одна учебная запись, а не её случайное оформление в терминале.

Запись на уровне INFO

import logging

logger = logging.getLogger("app.jobs")

def run_job():
    logger.info("job %s ready", "demo")

def test_job_message(caplog):
    with caplog.at_level(logging.INFO, logger="app.jobs"):
        run_job()

    assert ("app.jobs", logging.INFO, "job demo ready") \
        in caplog.record_tuples

at_level временно задаёт нужный уровень. После выхода из контекста прежнее значение восстанавливается. В кортеже проверяется уже сформированное сообщение с подставленным аргументом.

Как выбрать представление для проверки

caplog.records содержит объекты LogRecord, а record_tuples даёт тройки из имени логгера, уровня и сообщения. caplog.text подходит, когда требуется именно текстовое представление.

Проверка вхождения одной нужной записи устойчивее к посторонним сообщениям, если их отсутствие не является требованием. Когда тест должен запретить любые дополнительные записи, сравнивайте полный ожидаемый набор явно.

caplog.clear() очищает уже захваченные записи перед следующим действием. Данные отдельных стадий теста можно получать через get_records(when), например для setup или teardown.

Почему запись могла не попасть в caplog

Проверьте фактический вызов функции, уровень сообщения, имя логгера и его настройки. Обычный вывод через print и запись через logging относятся к разным механизмам захвата.

Фикстура добавляет обработчик к корневому логгеру. Если код полностью перенастраивает его через logging.config.dictConfig, обработчик может исчезнуть. Тогда пустой результат не доказывает, что функция не пыталась записать сообщение.

Практику тестирования можно пройти на курсах QA. Выбрать полезное утверждение для конкретного приложения поможет наставник по тестированию.

Похожие статьи по данной теме