使用unittest测试记录器消息

时间:2018-05-23 15:49:18

标签: python logging python-unittest

我想测试记录器消息而不将其打印到我的单元测试中的屏幕上。鉴于此代码:

 import logging
 logging.basicConfig(level=logging.ERROR)
 logger = logging.getLogger('test')
 logger.warning('this is a warning')

 # How do I see that there was a warning?

如何查看记录器中的日志记录以查看是否有警告?我在Logger中找不到可以完成这项工作的迭代器。

1 个答案:

答案 0 :(得分:2)

在这种情况下,您可能需要使用TestCase.assertLogs上下文管理器。

文档提供了一个很好的例子,可以用它做什么:

with self.assertLogs('foo', level='INFO') as cm:
   logging.getLogger('foo').info('first message')
   logging.getLogger('foo.bar').error('second message')
self.assertEqual(cm.output, ['INFO:foo:first message',
                             'ERROR:foo.bar:second message'])

在上下文管理器中,您可以访问cm.records获取LogRecord实例列表,或cm.output获取格式化邮件列表