python - 如何检查用于日志记录的处理程序?

标签 python python-unittest functional-testing

我正在为我的 Python 应用程序编写功能测试。我在我正在测试的代码中使用 Python 标准日志记录包。在我的单元测试中,我模拟了日志包,但对于功能测试,我想测试两件事:

  1. 日志的格式正确 - 这个我可以检查 ok -
  2. 日志被发送到 stdout - 这是我有点迷路的地方 -

我能够捕获日志并检查消息是否正确。这是我正在使用的代码:

with assertLogs('', level='INFO') as captured_logs:
    do_something()
    assertEqual(captured_logs.records[0].msg, "expected message")

这工作正常,但我只测试我的第 1 点,生成日志并且消息符合预期。

我的问题是如何测试这些日志实际上是发送到 stdout 而不是文件或 stderr 等?

编辑:

要测试的代码示例可以是

import logging    

def do_something():
    logging.warning("expected message")

测试该代码的结果将是测试通过,因为记录的消息是预期的消息。但无论日志是转到文件,还是转到 sys.stdoutsys.stderr,它都会通过...我的问题是我需要添加什么到测试代码以确保测试仅在日志消息转到标准输出时通过

谢谢!!

最佳答案

您检查根记录器的处理程序以验证 StreamHandler(这是在控制台上记录的处理程序)是它唯一的记录器。

例如:

from logging import getLogger, StreamHandler

root_logger = getLogger('')
assert len(root_logger.handlers) == 1
assert isinstance(root_logger.handlers[0], StreamHandler)

关于python - 如何检查用于日志记录的处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50856577/

相关文章:

python - InfluxDB 缺少标签值(putInfluxDB nifi 处理器)

python - 最快的 Python native 方式来处理图像?

python - 在 django 中使用 python unittest 运行特定的测试用例

javascript - Testcafe:重复点击直到出现另一个元素

python - 执行功能的算法仅占所有情况的 12%

python - 如何模拟从函数导入但不存在于 sys.path 中的模块?

使用假设的python测试

c++ boost计算函数花费的时间

php - 测试 Symfony2 session

python - 解构赋值和 "normal"赋值有什么区别?