Как проверить формат журнала Python в unittest? - PullRequest
0 голосов
/ 10 января 2019

Недавно я пишу расширение для регистрации в Python и хочу добавить несколько тестов для моего расширения, чтобы проверить, работает ли мое расширение как ожидалось.
Однако я не знаю , как получить полный журнал и сравнить с моим исключенным результатом в unittest / pytest.

упрощенный образец :

# app.py
import logging
def create_logger():
    formatter = logging.Formatter(fmt='%(name)s-%(levelname)s-%(message)s')
    hdlr = logging.StreamHandler()
    hdlr.setFormatter(formatter)
    logger = logging.getLogger(__name__)
    logger.setLevel('DEBUG')
    logger.addHandler(hdlr)
    return logger


app_logger = create_logger()

Вот мои тесты

Попытка 1: единичное тестирование

from app import app_logger
import unittest


class TestApp(unittest.TestCase):

    def test_logger(self):
        with self.assertLogs('', 'DEBUG') as cm:
            app_logger.debug('hello')
        # or some other way to capture the log output.
        self.assertEqual('app-DEBUG-hello', cm.output)
  • ожидаемое поведение:
    cm.output = 'app-DEBUG-hello'
    
  • реальное поведение
    cm.output = ['DEBUG:app:hello']
    

Попытка 2: pytest caplog

from app import app_logger
import pytest


def test_logger(caplog):
    app_logger.debug('hello')
    assert caplog.text == 'app-DEBUG-hello'
  • ожидаемое поведение:
    caplog.text = 'app-DEBUG-hello'
    
  • фактическое поведение
    caplog.text = 'test_logger.py               6 DEBUG    hello'
    

Попытка 3: pytest capsys

из приложения import app_logger импортный тест

def test_logger(capsys):
    app_logger.debug('hello')
    out, err = capsys.readouterr()
    assert err
    assert err == 'app-DEBUG-hello'
  • ожидаемое поведение:
    err = 'app-DEBUG-hello'
    
  • реальное поведение
    err = ''
    

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...