Приспособление Pytest Caplog не ловит сельдерея бревна - PullRequest
0 голосов
/ 14 апреля 2020

Я пишу несколько тестов, касающихся входа в мои задачи сельдерея. Для этого я хочу захватить сообщения журнала в моих тестах (аналогично этому: Получить все выходные данные журнала с помощью 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
...