Я пытаюсь написать тест с использованием pytest, который бы проверял, что определенная функция записывает предупреждение в журнал, когда это необходимо. Например:
In module.py:
import logging
LOGGER = logging.getLogger(__name__)
def run_function():
if something_bad_happens:
LOGGER.warning('Something bad happened!')
In 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()
пишет в терминал, поэтому я думаю, что это будет доступно с stdout
...?
В принципе, кто-нибудь знает, как я могу получить доступ к этому "Что-то плохое случилось!" из test_func()
?