首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

pytest内置插件40. logging-plugin | 对python日志内容捕获、断言和记录

本文系《pytest源码剖析》系列内容

40. logging-plugin

插件路径:_pytest.logging.LoggingPlugin

实现的 hook

调用的 hook

定义的 fixture

插件功能

通过多个 hook,连接 pytest 和 logging,实现日志捕获

实例化多个 handler,分别处理捕获到的日志内容

代码片段

def _log_cli_enabled(self): """Return whether live logging is enabled.""" enabled = self._config.getoption( "--log-cli-level" ) is not None or self._config.getini("log_cli") if not enabled: return False terminal_reporter = self._config.pluginmanager.get_plugin("terminalreporter") if terminal_reporter is None: # terminal reporter is disabled e.g. by pytest-xdist. return False

return True class _FileHandler(logging.FileHandler):

def handleError(self, record: logging.LogRecord) -> None: pass

要关闭命令行显示日志,需要同时满足:

命令行参数 --log-cli-level 不传递参数

ini 配置文件 log_cli 不设置或设置为 false

pytest-xidst启用时,强制关闭命令行日志

在记录日志文件时,就算有问题也不会报错,这时需要采取技巧进行排查

简评

插件创建了 4 个日志记录器,每当一条日志被记录时,会分别按照以下方式处理:

caplog_handler:记录到 fixture 中,供用例使用

report_handler:记录到 report 中,供测试报告使用

log_file_handler:记录到文件中,形成日志文件

log_cli_handler:记录到终端中,在命令行输出

...

caplog_handler 和 report_handler 的实现方式是一样的,

以每个用例为单位,捕获日志内容,并交给 pytest 使用。

其中 caplog_handler 被存储到item.stash,被 fixture 使用,详见《logging 插件》

而 report_handler 被存储到item._report_sections,被测试报告使用,在用例失败时进行显示

详见《report 插件》

...

log_file_handler 和 log_cli_handler 是以整个测试会话为单位,

它们都重写了handleError方法导致在处理日志时,如果出现错误,是不进行任何处理

这就是很多人遇到下面这个问题的原因:

日志格式配置错误,导致日志文件会自动创建,内容始却终为空

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Os8C-lG2VrGiXAHQudEYkNMA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券