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

pytest核心组件:pluggy插件系统(一)

1. pluggy 简介

pluggy 在其官网(https://pluggy.readthedocs.io/en/stable/)是这么介绍自己的:

pluggy is the crystallized core of plugin management and hook calling for pytest

言简意赅的说了 pluggy 的作用,以及 pluggy 和 pytest 的关系:

之前 pluggy 是 pytest 的一部分,负责插件管理和钩子(hook)调用,

后来对 pluggy 进行单独发布和维护,

所有的的 python 程序都可以借助 pluggy 让自己支持” 插件 “功能

2. 插件机制实现原理

通过一个简单的代码了解插件机制的原理

定义 hook

调用 hook

执行结果如下

通过这个例子看出,pluggy 中共有三个角色:

hookspec:是 HookspecMarker 的实例,用来装饰 hook 的申明函数

hookimpl :是 HookimplMarker 的实例,用来装饰 hook 的实现函数

pm:是 PluginManager 实例,用来连接 hookspec 和 hookimpl,并完成 hook 调用

pm 在调用 hook 时,定义在不同位置的 hook 实现都会被调用执行,于是产生 “插件” 效果。

在前文《从源码的角度重新认识 pytest》中提到,pytest 包含了大量的内置插件,同时也支持安装第三方发插件,

这些插件都会被 pm 自调用,从而成为pytest 的一部分。

上面这个例子只是进行原理演示的 demo,在实际的场景(比如 pytest)中更加复杂一些,通常软件和插件分属不同的项目,需要分别安装

那么软件是怎么找到插件,并将其注册到pm中的呢?

下一节再看一个稍微复杂但是更加完整的例子

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券