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

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

正在连载,欢迎关注

图片

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

执行结果如下

Plugin_2.myhook 被调用Plugin_1.myhook 被调用results=[-1, 3]

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

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

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

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

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

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

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

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

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

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

首发于公众号:测试开发研习社

原创不易,喜欢请星标+点赞+在看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值