Как иметь один регистратор в каждом тестовом случае? - PullRequest
1 голос
/ 05 июня 2019

Я бы хотел добавить дополнительную регистрацию в тестовые сценарии Pytest Framework. В настоящее время моя идея такова: Регистратор относится к следующей конфигурации (скажем, по умолчанию)

import logging
class Logger:
    logger = logging.getLogger()
    handler = logging.StreamHandler()
    formatter = logging.Formatter(
        '%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    logger.setLevel(logging.INFO)

В ходе конкурса я создаю прибор, который на самом деле является экземпляром Logger:

#conftest.py
@pytest.fixture
def trace():
    trace = Logger()
    return trace

Затем я передаю эту трассировку каждому тесту, где требуется регистрация.

trace.logger.info("Processing data")
    value = input_data.data["value1"]

Это работает, но я не уверен, есть ли что-то лучше иметь один общий логгер для каждого теста. В настоящее время также необходимо передать этот прибор в любой тест, я хочу добавить больше следов.

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Если вы хотите проверить, что записано в ваших различных тестах, pytest поставляется с включенным в комплектацию аккумуляторным устройством под названием caplog.Вам не нужно создавать свой собственный обработчик, как я делал при тестировании с unittest.

https://docs.pytest.org/en/latest/logging.html

1 голос
/ 05 июня 2019

Вы неправильно понимаете, как работает logging.getLogger().Регистраторы - это своего рода одиночка ...

logging.getLogger() вернет объект регистратора, если он уже был создан, или создаст и вернет новый объект.Если вы хотите получить разные регистраторы, вам нужно дать им имена.

Пример:

logger = logging.getLogger("logger1")

Вы должны взглянуть туда, документ действительно готов: https://docs.python.org/3/howto/logging-cookbook.html

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