Недавно я пишу расширение для регистрации в 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)
Попытка 2: pytest caplog
from app import app_logger
import pytest
def test_logger(caplog):
app_logger.debug('hello')
assert caplog.text == 'app-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 = ''
Учитывая, что будет много тестов с другим форматом, я не хочу проверять формат журнала вручную. Я не знаю, как получить полный журнал, как я вижу на консоли, и сравнить его с моим ожидаемым в тестовых примерах. Надеюсь на вашу помощь, спасибо.