Pytest----pluggy源码解读基础准备
创始人
2024-03-29 10:13:39
0

【原文链接】Pytest----pluggy源码解读基础准备

解读pluggy源码,直接使用pytest环境中安装的pluggy即可,比如这里安装的pluggy版本是1.0.0,为了更好的理解源码,这里首先使用如下应用代码作为应用实例,从如下代码中可以分析出,pluggy的使用步骤主要包括一下几个步骤:
1) HookspecMarker类实例化
2) HookimplMarker类实例化
3) 定义一个接口类,接口类中的函数上使用1)中的实例化作为装饰器装饰
4) 定义一个实现类,实现类中的函数上使用2)中的实例化作为装饰器装饰
5) PluginManager类实例化
6) 对5)中的实例调用 add_hookspecs方法
7) 使用5)中的实例调用注册方法
8) 通过5)中实例的hook属性调用接口方法。

import pluggyhookspec = pluggy.HookspecMarker("myproject")
hookimpl = pluggy.HookimplMarker("myproject")class MySpec:@hookspecdef myhook(self, arg1, arg2):passclass Plugin_1:@hookimpl()def myhook(self, arg1, arg2):print("in Plugin_1.myhook()")return arg1 + arg2class Plugin_2:@hookimpl(hookwrapper=True)def myhook(self, arg1, arg2):print("in Plugin_2.myhook() before yield...")output=yieldresult=output.get_result()print("in Plugin_2.myhook() after yield...")print(result)class Plugin_3:@hookimpldef myhook(self, arg1, arg2):print("inside Plugin_3.myhook()")return arg1 - arg2+10pm = pluggy.PluginManager("myproject")
pm.add_hookspecs(MySpec)
pm.register(Plugin_1())
pm.register(Plugin_2())
pm.register(Plugin_3())
results = pm.hook.myhook(arg1=1, arg2=2)
print("after all run ...")
print(results)

为更好的定位跳转,可以在pycharm中打开上述测试代码,并配置解释器,然后即可在External Library中找到pluggy的源码了,如下图所示。

pluggy 源码只有以下7个文件

pluggy|--------__init__.py|--------_caller.py|--------_hooks.py|--------_manager.py|--------_result.py|--------_tracing.py|--------_version.py

其中__init__.py文件代码如下,即这里通过__all__限定了pluggy外部只允许使用PluginManager、PluginValidationError、HookCallError、HookspecMarker、HookimplMarker这五个类。

try:from ._version import version as __version__
except ImportError:# broken installation, we don't even try# unknown only works because we do poor mans version compare__version__ = "unknown"__all__ = ["PluginManager","PluginValidationError","HookCallError","HookspecMarker","HookimplMarker",
]from ._manager import PluginManager, PluginValidationError
from ._callers import HookCallError
from ._hooks import HookspecMarker, HookimplMarker

而_version.py中的内容如下,这里是设置pluggy版本号的。

# coding: utf-8
# file generated by setuptools_scm
# don't change, don't track in version control
version = '1.0.0'
version_tuple = (1, 0, 0)

然后就可以在pycharm中对pluggy应用实例脚本中通过按住Ctrl键,然后鼠标点击即可跳转到对应的函数定义了,比如如下图所示

然后就可以根据pluggy的应用实例代码对pluggy源码进行解析了。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...