我正在尝试使用 pytest 编写一个测试,它将检查特定函数是否在需要时向日志写出警告。例如:
在 module.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
我已经看到,通过向测试传递 capsys
或 caplog
作为参数,然后使用 capsus.readouterr()
或 caplog.records
访问输出,您可以通过 pytest 获得日志或 stdout/stderr。
但是,当我尝试这些方法时,我只看到“测试现在”而不是“发生了不好的事情!”.似乎发生在 run_function()
调用中的日志输出不能从 test_func()
访问?
如果尝试更直接的方法(如 sys.stdout.getvalue()
) ,也会发生同样的情况。这是令人困惑的,因为 run_function()
正在写入终端,所以我认为可以从 stdout
访问... ?
基本上,有人知道我如何从 test_func()
内部访问“发生了不好的事情!”吗?