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

pytest的内置插件盘点28. logging | 对python日志内容捕获、断言和记录

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

28. logging

插件路径:_pytest.logging

实现的 hook

调用的 hook

定义的 fixture

caplog

插件功能

创建了一系列参数和配置:

日志等级

日志格式

日志时间格式

日志内容是否在命令行显示

日志内容保存到哪个文件

日志内容是否自动缩进

创建 fixturecaplog

创建并注册插件logging-plugin

代码片段

def get_option_ini(config: Config, *names: str): for name in names: ret = config.getoption(name) # 'default' arg won't work as expected if ret is None: ret = config.getini(name) if ret: return ret

def add_option_ini(option, dest, default=None, type=None, **kwargs): parser.addini( dest, default=default, type=type, help="Default value for " + option ) group.addoption(option, dest=dest, **kwargs)

同时创建命令行参数或 ini 配置

也同时从命令行参数或 ini 配置中取值

简评

这个插件做的事情可以大致分为两部分,

第一部分是面向用户的,也就是编写用例时会用到的,

第二部分是面向框架的,也就是框架运行时 pytest 会用的,

...

先说第一个部分,用例、用户相关的,这部分的功能通过 fixture 进行提供

前有,

capture插件提供的 fixture:capsys、capfd,捕获输出

recwarn插件提供了 fixture:recwarn,捕获警告

现在,

logging插件提供了 fixture:caplog,捕获日志

它们有一些相似点:

function 作用域,仅对当前用例生效,与其他用例隔离

在 setup 阶段,开始捕获

返回实例对象,有多种灵活用法

在 teardown 阶段,还原捕获

...

当然也有一些细致的区别,具体到 calog,有下面几种用法

def test_logging(caplog): caplog.text # 已捕获日志的文本字符串 caplog.records # 已捕获日志的对象列表 caplog.record_tuples # 已捕获日志的元组列表,包含名称、等级、内容 caplog.record_tuples # 已捕获日志的内容列表 caplog.set_level(logging.DEBUG) # 设置记录的等级下限 caplog.clear() # 清除已捕获的日志

...

再说第二部分,

插件提供了一些函数、类,供自己和子插件使用。

实际上,第三方插件也可以拿来使用

_remove_ansi_escape_sequences:移除日志中的验收控制符合(我被 appium 的日志烦了好久,可算遇到救星了)

get_log_level_for_setting:从配置文件中读取日志等级(不用手动判断 + 转换了)

get_option_ini:从命令行和配置文件中读取配置

add_option_ini:创建命令行和配置文件(和上一个配合使用)

LoggingPlugin:插件,在 pytest 运行的各个阶段进行日志捕获

item.stash[caplog_handler_key]:用例状态,在不同插件之间传递对象

...

这个插件很好得表现出了:

面向用例、用户的功能,应该通过 fixues 提供,

面向框架、插件、开发任意的功能通过 hook 提供

对想要学习和掌握 pytest 的人,也指出了清晰的方向:

如果想用好 pytest:了解 fixture、使用 fixture、设计 fixture,

如果想改进 pytest:了解 hook,使用 hook、设计 hook

与各位共勉~

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券