gpt4 book ai didi

python - 使用 pytest 测试日志输出

转载 作者:行者123 更新时间:2023-11-28 19:46:56 27 4
gpt4 key购买 nike

我正在尝试使用 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

我已经看到,您可以通过将 capsyscaplog 作为参数传递给测试,然后使用其中一个来使用 pytest 获取日志或标准输出/标准错误capsus.readouterr()caplog.records 访问输出。

但是,当我尝试这些方法时,我只看到“现在正在测试。”,而不是“发生了不好的事情!”。似乎无法从 test_func() 访问 run_function() 调用中发生的日志输出?

如果我尝试更直接的方法,例如 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

关于python - 使用 pytest 测试日志输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53125305/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com