gpt4 book ai didi

python - 为 Python 记录器格式化输出编写单元测试

转载 作者:行者123 更新时间:2023-12-02 04:05:00 25 4
gpt4 key购买 nike

如何在 Python 中编写一个单元测试来测试记录器的输出是否确实是您期望的格式(即通过调用logging.basicConfig()设置)?我正在考虑自定义 StreamHandler 和使用“re”库,但看起来传递给 StreamHandler.emit() 的 LogRecord 不能给我将要输出的字符串。

最佳答案

来自文档 (http://packages.python.org/testfixtures/logging.html):

To help with this, TestFixtures allows you to easily capture the output of calls to Python’s logging framework and make sure they were as expected. There are three different techniques, depending on the type of test you are writing.

  1. The context manager
  2. The decorator
  3. The manual usage

示例包含在文档中。缩短版本如下。

上下文管理器

>>> import logging
>>> from testfixtures import LogCapture
>>> with LogCapture() as l:
... logger = logging.getLogger()
... logger.info('a message')
... logger.error('an error')

之后您可以检查日志是否相等:

>>> l.check(
... ('root', 'INFO', 'a message'),
... ('root', 'ERROR', 'another error'),
... )
Traceback (most recent call last):
...
AssertionError: Sequence not as expected:

same:
(('root', 'INFO', 'a message'),)

first:
(('root', 'ERROR', 'another error'),)

second:
(('root', 'ERROR', 'an error'),)

装饰器

与之前类似,但应用于特定功能:

from testfixtures import log_capture

@log_capture()
def test_function(l):
logger = logging.getLogger()
logger.info('a message')
logger.error('an error')

l.check(
('root', 'INFO', 'a message'),
('root', 'ERROR', 'an error'),
)

手动使用

>>> from testfixtures import LogCapture
>>> l = LogCapture()

之后您还可以“检查”日志:

>>> l.check(('root', 'INFO', 'a message'))
<...>

编辑:要访问特定日志并以自定义方式分析它们,您只需迭代 l.records (其中 l 是只是 LogCapture 的实例)并访问它们每个的一些属性(例如,msg 包含发送到记录器的消息,levelname 包含级别,还有很多其他属性)。

关于python - 为 Python 记录器格式化输出编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11165354/

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