Я пишу несколько тестов, касающихся входа в мои задачи сельдерея. Для этого я хочу захватить сообщения журнала в моих тестах (аналогично этому: Получить все выходные данные журнала с помощью mock ).
Хотя версия unittest с "assertLogs" работает (см. Ниже) ) Я бы предпочел использовать pytest с креплением каплога. Однако это, похоже, не в состоянии перехватить журналы из задачи сельдерея (действительно перехватывает журналы из других регистраторов). У кого-нибудь есть объяснение / идея для исправления с использованием pytest?
import unittest
import pytest
import logging
from celery.utils.log import get_task_logger
task_logger = get_task_logger("task_name")
other_logger = logging.getLogger(__name__)
class test_logging_TestCase(unittest.TestCase):
#Passes
def test_log_unittest_task(self):
with self.assertLogs(task_logger, level='WARNING') as cm:
task_logger.warning("foo")
assert(len(cm.records) == 1)
#Passes
def test_log_unittest_other(self):
with self.assertLogs(other_logger, level='WARNING') as cm:
other_logger.warning("foo")
assert(len(cm.records) == 1)
#Passes
def test_pytest_other(caplog):
other_logger.warning("bar")
assert len(caplog.records) == 1
#This is the only test that fails (unexpectedly)
def test_pytest_task(caplog):
task_logger.warning("bar")
assert len(caplog.records) == 1