Исключение для крепления колпачка

#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