Тестирование вывода журнала с помощью pytestPython

Программы на Python
Anonymous
Тестирование вывода журнала с помощью pytest

Сообщение Anonymous »

Я пытаюсь написать тест, используя pytest, который проверит, записывает ли определенная функция предупреждение в журнал, когда это необходимо. Например:

В модуле.py:

Код: Выделить всё

import logging
LOGGER = logging.getLogger(__name__)

def run_function():
if something_bad_happens:
LOGGER.warning('Something bad happened!')
В test_module.py:

Код: Выделить всё

import logging
from module import run_function

LOGGER = logging.getLogger(__name__)

def test_func():
LOGGER.info('Testing now.')
run_function()
~ somehow get the stdout/log of run_function() ~
assert 'Something bad happened!' in output
Я видел, что вы предположительно можете получить журнал или stdout/stderr с помощью pytest, передав capsys или caplog в качестве аргумента теста, а затем используя capsus.readouterr() или caplog.records для доступа к выходным данным.

Однако, когда я пробую эти методы, я вижу только «Тестирование сейчас», а не «Произошло что-то плохое!». Кажется, что вывод журнала, который происходит при вызове run_function(), недоступен из test_func()?

То же самое произойдет, если я попробую более прямой метод, например sys.stdout.getvalue(). Это сбивает с толку, поскольку run_function() записывает данные в терминал, поэтому я думаю, что это будет доступно из стандартного вывода...?

По сути, кто-нибудь знает, как я могу получить доступ к этому «Произошло что-то плохое!» изнутри test_func()?

Вернуться в «Python»