[pytest源码4]-pluggy之Plugin注册逻辑分析

2023-11-18

前言

本篇将详细对plugin的注册逻辑进行分析
个人拙见,有错请各位指出。
如果的我的文章对您有帮助,不符动动您的金手指给个Star,予人玫瑰,手有余香,不胜感激。 GitHub



pluggy注册逻辑分析性

我们来详细分析一下plugin的注册逻辑register方法

下面以分片段的形式呈现

  plugin_name = name or self.get_canonical_name(plugin)    #获取插件名

  if plugin_name in self._name2plugin or plugin in self._plugin2hookcallers:
      if self._name2plugin.get(plugin_name, -1) is None:
          return  # blocked plugin, return None to indicate no registration
      raise ValueError(
          "Plugin already registered: %s=%s\n%s"
          % (plugin_name, plugin, self._name2plugin)
      )
  • 根据传入plugin name或由plugin对象获取到插件名,将其赋值给plugin_name
  • self._name2plugin是以plugin_name为key的dict
  • self._pluginhookcallers是以plugin object为key的dict
  • 通过上述两个dict来判断传入的plugin是否已经注册过了



  self._name2plugin[plugin_name] = plugin
  • 将这个pluggy以plugin_name:plugin object的形式保存到self._name2plugin



  self._plugin2hookcallers[plugin] = hookcallers = []
  • 创建一个list对象hookcallers用来保存每个pluggy的实际调用对象_HookCaller,以plugin object:hookcallers object的形式保存在self._plugin2hookcallers



  for name in dir(plugin):
      hookimpl_opts = self.parse_hookimpl_opts(plugin, name)    #获取pluggy的属性或方法中的特殊attribute project_name + _impl
      if hookimpl_opts is not None:
          normalize_hookimpl_opts(hookimpl_opts)
          method = getattr(plugin, name)    #特殊attribute存在时获取到plugin的对应方法
          hookimpl = HookImpl(plugin, plugin_name, method, hookimpl_opts)
          hook = getattr(self.hook, name, None)
      
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[pytest源码4]-pluggy之Plugin注册逻辑分析 的相关文章

  • 如何捕获 Python Unittest 测试用例失败的屏幕截图

    我使用 Python 3 6 5 和以下库 Appium Python 客户端 0 26 单元测试2 1 1 0 硒 3 5 0 pytest 3 6 3 现在我需要截图以防测试失败 所以我故意做了一个错误的陈述self driver fi
  • pytest django:无法访问固定装置拆卸中的数据库

    我需要在使用夹具后显式删除它 我知道 pytest django 默认情况下会在拆卸时删除所有对象 但在这种特殊情况下 我需要手动执行此操作 然而 虽然我的测试被标记为pytest mark django db 我能够创建一个夹具 但在经过
  • pytest:无法模拟我的班级的 __init__

    我有一个习惯Db类 具有基本操作 我正在尝试围绕它编写测试 在 init 在我的班级中 我正在连接到我想避免的实际数据库 因为我只是编写单元测试 不需要连接到实际数据库 这是我的代码 mock patch mydb Db pytest ma
  • Pytest版本冲突错误

    更新 Debian Jessie 后 pytest 无法工作 py test Traceback most recent call last File usr bin py test line 5 in
  • 如何使用 pytest 测试无限 while 循环

    我目前正在编写一个与bamboo 构建服务器交互的小库 测试是使用 pytest 完成的 我陷入了以下问题 我想测试一个 while 循环 该循环运行直到满足某些状态 阅读 pytest 文档 我尝试 模拟 monkeypatch 状态 但
  • 如何针对不同版本的 python 运行 py.test?

    是否可以运行py test使用不带插件的不同版本的python 例如xdist or tox 最简单的方法是直接运行 pytest 模块 m 例如 python2 6 m pytest 请注意 您必须安装 pytest那个版本Python
  • 在 Flask-SQLAlchemy 中隔离 py.test 数据库会话

    我正在尝试使用 Flask SQLAlchemy 构建 Flask 应用程序 我使用 pytest 来测试数据库 问题之一似乎是在不同测试之间创建隔离的数据库会话 我编写了一个最小的完整示例来突出问题 请注意test user schema
  • 您将如何对这个 SQLAlchemy Core 查询/函数进行单元测试?

    我正在努力学习如何正确进行单元测试 鉴于这个功能 def get user details req user id users sa Table users db metadata autoload True s sa select use
  • FastAPI 中的单元测试

    我有一个使用 FastAPI 开发的后端应用程序 使用 SQLModel SQLAlchemy 和 Pydantic 并连接到 Postgres 数据库 我有集成测试来测试我的端点是否可以与暂存 PG DB 正常工作 但现在我必须编写单元测
  • 如何使用 pytest-mock 或 magicmock 模拟导入的对象

    我正在尝试理解mock monkeypatch pytest mock能力 让我知道这是否可能 如果没有 请建议我如何测试此代码 我的代码结构 app init py some module1 init py some module2 in
  • 在 pytest 测试中记录日志

    我想在测试函数中放置一些日志语句来检查一些状态变量 我有以下代码片段 import pytest os import logging logging basicConfig level logging DEBUG mylogger logg
  • 在函数装饰器中使用 pytest 夹具

    我想为我的测试函数构建一个有多种用途的装饰器 其中之一是帮助将属性添加到生成的junitxml 我知道有一个fixture https docs pytest org en latest usage html record property
  • 使用 pytest 生成 csv 文件报告

    是否可以以某种方式在 csv 文件中生成测试执行报告 我使用 python selenium pytest 任何建议将不胜感激 我写了一个pytest csv https github com nicoulaj pytest csv插件 希
  • 在 pytest 中参数化并运行单个测试

    如何从配置了参数化的集合中运行单个测试 假设我有以下测试方法 pytest mark parametrize PARAMETERS LIST PARAMETERS VALUES def test my feature self param1
  • 自定义 pytest junitxml 失败报告

    我正在尝试内省测试失败并将附加数据包含到 junit xml 测试报告中 具体来说 这是对外部产品的一套功能测试 我想将产品的日志包含到故障报告中 使用找到的方法here https stackoverflow com questions
  • 如何告诉 pytest-xdist 按顺序从一个文件夹运行测试,并并行运行其余文件夹?

    想象一下我有test unit 可以安全地并行运行并且test functional 目前还不能并行运行 有没有一种简单的方法可以说服 pytest 运行functional依次 考虑到我们正在讨论大量的测试 因此改变每个测试函数 方法将会
  • 如何访问 pytest 夹具中的所有标记?

    我正在使用 pytest 我想用标记来标记我的测试 这些标记将指定固定装置要在驱动程序中加载哪个页面 这可以轻松地与行为上下文对象一起使用 但我找不到如何使用 pytest 来做到这一点 以这段代码为例 import pytest pyte
  • 在参数化中传递 pytest 夹具

    通过在 pytest mark parametrize 中传递 conftest py 中定义的装置 我收到以下错误 pytest alist 0220 0221 test 1 py v s NameError name alist is
  • pytest 在导入时找不到模块,但代码运行良好

    目标是为使用 Cython 的 Python3 项目使用 pytest 单元测试框架 这不是即插即用的事情 因为默认情况下 pytest 无法导入 Cython 模块 也就是说 从 Cython pyx 模块导入时出现以下错误 在我的例子中
  • 如何将 pytest 装置与 django TestCase 一起使用

    我如何在TestCase方法 类似问题的几个答案似乎暗示我的例子应该有效 import pytest from django test import TestCase from myapp models import Category py

随机推荐

  • Zookeeper和Nacos的区别

    Zookeeper和Nacos的区别 在分布式系统中 注册中心充当着重要角色 是服务发现 客户端负载均衡中不可缺少的一员 注册中心除了能够实现基本的功能外 他的稳定性 可用性和健壮性对整个分布式系统的流畅运行影响重大 zookeeper和n
  • 如何写论文

    维生素C吃多了会上火 个人CSDN博文目录 AI论文精度 这篇博客讲解的是如何写文章 写论文异曲同工 参考书籍The Craft of Research 参考视频跟读者建立联系 研究的艺术 一 目录 书本目录 1 跟读者建立联系 如何权衡项
  • OpenCV——多分辨率LBP的计算方法

    目录 一 算法原理 1 原理概述 2 参考文献 二 代码实现 三 结果展示 一 算法原理 1 原理概述 基本LBP算子虽然在早期的实验中取得了一系列成果 但是应用于不同领域的具体问题时 该算子的处理结果并不能达到预期的效果 因此 很多学者对
  • 不同网段共享文件服务器,不同网段ip 如何设置局域网共享?

    具体操作如下 执行 开始 I 控制面板 命令 在打开的窗口中双击 网络和丨nternet连接 选项 打开 网络连接 窗口 在窗口左边的 网络任务 栏中选择 更改此连接设置 选项 弹出 本地连接属性 对话框 单击 安装 按钮 在win7弹出的
  • .NET 6 ‘Unable to configure HTTPS endpoint...

    Mac M1 NET 6 Exception has occurred CLR System InvalidOperationException System InvalidOperationException 类型的未经处理的异常在 Sy
  • 蓝桥杯 c/c++ 算法提高 最长滑雪道

    算法提高 最长滑雪道 资源限制 时间限制 1 0s 内存限制 256 0MB 问题描述 小袁非常喜欢滑雪 因为滑雪很刺激 为了获得速度 滑的区域必须向下倾斜 而且当你滑到坡底 你不得不再次走上坡或者等待升降机来载你 小袁想知道在某个区域中最
  • CSS(非)实用技巧——背景与边框

    参考 CSS揭秘 CSS Secrets 背景 CSS3 尽管 CSS3 这个名词非常流行 但它严格意义上并不是一个规范 因为在CSS2之后 CSS这门语言已经庞大到无法放进单个规范中了 CSS工作组将其分成不同的模块 其中在CSS2 1已
  • 图书馆数据库服务器设备性能分析,高校图书馆数据库利用率统计与绩效的浅析.doc...

    PAGE PAGE 1 高校图书馆数据库利用率统计与绩效的浅析 摘要 现代的社会是一个信息社会 社会经济发展步伐和高科技信息技术的发展已经超过了我们想象的能力范围 随着越来越多的高校图书馆的建立 为了更好的服务学生和学校教师的教学 科研工作
  • 线程的优先级

    package com kuang Demo05 测试线程的优先级 public class TestPriority public static void main String args System out println Threa
  • Eclipse 从Debug模式中退出

    如果您尚未处于Java透视图中 请在主菜单中选择Window gt Open Perspective gt Java或单击下面的 Click to Perform 链接 Eclipse的右侧有新手教学 简单来说就是菜单栏里按顺序点击 就能切
  • tensorflow-gpu版本详细安装教程(Win10,Python3.7.9,cuda11.2,cudnn8.1.0)

    目录 cuda安装 cudnn安装 python安装 tensorflow安装 cuda安装下载 首先要注意自己的显卡支持cuda的版本 可以这样自查 可以看到适合自己的cuda版本 这里我选择了cuda11 2版本 cuda安装包下载链接
  • 虚拟机与物理机的三种连接方式

    引言 vmware为我们提供了三种网络工作模式 它们分别是 Bridged 桥接模式 NAT 网络地址转换模式 Host Only 仅主机模式 我们在刚刚接触它们的时候 常常被搞的晕头转向 今天我就为大家介绍一下这三种连接方式 桥接模式 桥
  • web前台传递时间日期格式转换为java.util.date,initBinder或者@DateTimeFormat方式

    方法1 根据前台传递的日期格式 在后台创建一个参数绑定的方法 将对应的日期字符串 转换为 java util date 从界面传递参数到spring后台controller类中 日期格式默认只能传long类型的时间戳 如果想要传递格式化的日
  • 阿里云ECS部署Nginx配置域名访问

    目录 前言 环境 具体步骤 服务器 域名 SSL证书 Nginx配置 前言 记录下阿里云服务器建站的过程 回回建 回回忘 尴尬 环境 ECS Centos7 6 Nginx 具体步骤 服务器 首先 需要购买一台服务器 域名 需要购买一个域名
  • Python unicode equal comparison failed

    用python进行判断的时候 如果包含中文会报错 name 这里是中文 if i name print right 修改成 name 这里是中文 decode utf 8
  • 聊聊undefined 和 undeclared

    一 undefined 在Js中 有两个表示 空 的值undefined和null 其中比较有用的是 undefined undefined 是一个值为 undefined 的类型 JavaScript语言也定义了一个全局变量 它的值是 u
  • oracle存储过程----异常的写法介绍

    上一篇 oracle存储过程 case条件控制语句的用法 oracle存储过程 异常介绍 参考PL SQL 存储过程中的异常来自于程序本身 也有的来自开发人员自定义的数据 而所有的这些错误我们称之为异常 编译时的错误不能称为异常 esmp
  • kubeadm配置虚拟机k8s集群

    环境 centos7 vm pro windows terminal termius 虚拟机 硬件配置 2核2G 实验用 具体可根据电脑调整 配置3台 master01 node01 node02 通过克隆虚拟机直接复制 配置通一项以后建议
  • spark-submit 报错 Initial job has not accepted any resources

    spark submit 报这样的错误 WARN scheduler TaskSchedulerImpl Initial job has not accepted any resources check your cluster UI to
  • [pytest源码4]-pluggy之Plugin注册逻辑分析

    前言 本篇将详细对plugin的注册逻辑进行分析 个人拙见 有错请各位指出 如果的我的文章对您有帮助 不符动动您的金手指给个Star 予人玫瑰 手有余香 不胜感激 GitHub pluggy注册逻辑分析性 我们来详细分析一下plugin的注