python - 使用 pytest 测试日志输出
问题描述
我正在尝试使用 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()
?
解决方案
我不知道为什么我以前尝试过它时这不起作用,但是这个解决方案现在对我有用:
在 test_module.py 中:
import logging
from module import run_function
LOGGER = logging.getLogger(__name__)
def test_func(caplog):
LOGGER.info('Testing now.')
run_function()
assert 'Something bad happened!' in caplog.text
推荐阅读
- ios - 快速删除折线
- vba - 在vba中格式化文本
- java - 无法转换为 com.google.android.gms.location.LocationListener
- python - tkinter.scrolledtext.ScrolledText columnspan 问题
- python - 通过 Flask 上传多个图像并在 JSON 中存储列表
- malloc - 查找使用 malloc 获得的内存大小
- ios - self.presentingViewController 不是应该的那个?
- javascript - 数据未推入数组nodejs
- c# - 在 Docker 容器中访问 .NET Core 项目中的 CSV 文件
- c# - 从数据库 c# asp.net mvc core 更改现有应用程序