#python #pytest #caplog
Вопрос:
Поэтому у меня есть много тестов (pytest), которые тестируют журналы с приспособлением caplog, вероятно, не лучшим образом (как я сейчас понимаю). Я использовал множество операторов, таких как caplog.records[0]
и caplog.records[-1]
, но теперь мне нужно что-то записать в функцию, которая часто вызывается в моем проекте, и это портит весь мой тест, где я в настоящее время не ожидал дополнительных журналов. Есть ли какой-нибудь способ, как я могу сказать caplog, что он не должен записывать этот новый конкретный журнал, без необходимости переписывать все способы использования caplog?
Я думал о чем-то вроде написания обертки вокруг крышки …?
Ответ №1:
Я нашел довольно простое решение этой проблемы: я могу просто отключить определенные регистраторы по имени с помощью простого приспособления, подобного этому:
@pytest.fixture(scope='function') def disable_logger(): """ you can use this fixture to disable certain loggers in your tests. for that you need to call the fixture with a list of str like: disable_logger(["your.path.to.your.logger"]). """ _logger_names = [] def func(names): if not isinstance(names, list) or any(not isinstance(s, str) for s in names): raise TypeError("disable_logger expects a list of str") _logger_names.extend(names) for name in _logger_names: logger = logging.getLogger(name) logger.disabled = True yield func for name in _logger_names: logger = logging.getLogger(name) logger.disabled = False