gpt4 book ai didi

python - 如何使用日志记录、pytest fixture 和 capsys?

转载 作者:太空狗 更新时间:2023-10-29 20:44:50 24 4
gpt4 key购买 nike

我正在尝试对一些使用日志库的算法进行单元测试。

我有一个可以创建记录器的装置。

在我的第一个测试用例 中,我没有使用这个 fixture ,而是使用打印记录到标准输出。此测试用例通过

在我的第二个测试用例中,我使用了这个 fixture ,但没有在 pytest 文档中记录。我只是在我的测试中调用相关函数来获取记录器。然后我使用记录器记录到标准输出。此测试用例通过

在我的第三个测试用例中,我按照 pytest 文档中的说明使用了这个 fixture 。 fixture 作为参数传递给测试函数。然后我使用记录器记录到标准输出。此测试用例失败!它在 stdout 中找不到任何内容。但是在错误消息中,它说我的日志在捕获的标准输出调用中。

我做错了什么?

import pytest

import logging
import sys

@pytest.fixture()
def logger():

logger = logging.getLogger('Some.Logger')
logger.setLevel(logging.INFO)
stdout = logging.StreamHandler(sys.stdout)
logger.addHandler(stdout)

return logger

def test_print(capsys):

print 'Bouyaka!'

stdout, stderr = capsys.readouterr()
assert 'Bouyaka!' in stdout

# passes

def test_logger_without_fixture(capsys):

logger().info('Bouyaka!')

stdout, stderr = capsys.readouterr()
assert 'Bouyaka!' in stdout

# passes

def test_logger_with_fixture(logger, capsys):

logger.info('Bouyaka!')

stdout, stderr = capsys.readouterr()
assert 'Bouyaka!' in stdout

# fails with this error:
# > assert 'Bouyaka!' in stdout
# E assert 'Bouyaka!' in ''
#
# tests/test_logging.py:21: AssertionError
# ---- Captured stdout call ----
# Bouyaka!

如果我顺便重新排序测试用例,则没有变化。

最佳答案

非常感谢您的想法!

反转logger,capsys,使logger请求capsys fixture 并使用capfd不要改变任何东西。

我试过了 pytest-catchlog插件,它工作正常!

import pytest

import logging

@pytest.fixture()
def logger():

logger = logging.getLogger('Some.Logger')
logger.setLevel(logging.INFO)

return logger

def test_logger_with_fixture(logger, caplog):

logger.info('Bouyaka!')

assert 'Bouyaka!' in caplog.text

# passes!

在我最初的测试中,我登录到 stdout 和 stderr 并捕获它们。这是一个更好的解决方案,因为我不需要此调整来检查我的日志是否正常工作。

好吧,现在我只需要重新编写所有测试以使用 caplog,但这是我自己的事 ;)

现在我有了更好的解决方案,唯一剩下的就是了解我的原始测试用例 def test_logger_with_fixture(logger, capsys) 中的错误。

关于python - 如何使用日志记录、pytest fixture 和 capsys?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38594296/

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