[pytest源码5]-pluggy深挖调用逻辑

2023-10-29

前言

本篇将详细分析如何通过PluginManager.hook调用plugin实现。
个人拙见,有错请各位指出。
如果的我的文章对您有帮助,不符动动您的金手指给个Star,予人玫瑰,手有余香,不胜感激。 GitHub



pytest-pluggy深挖hook调用逻辑

前面介绍了不少hook的调用逻辑,但是还有个hook_execute没接上,这里来完整的分析pm.hook.calculate(a=2, b=3)的执行过程

每当我们调用pm.hook.xxx(**kwargs)的时候,实际上是调用了_HookCaller对象的__call__方法

    def __call__(self, *args, **kwargs):
        if args:
            raise TypeError("hook calling supports only keyword arguments")
        assert not self.is_historic()
        if self.spec and self.spec.argnames:
            notincall = (
                set(self.spec.argnames) - set(["__multicall__"]) - set(kwargs.keys())
            )
            if notincall:
                warnings.warn(
                    "Argument(s) {} which are declared in the hookspec "
                    "can not be found in this hook call".format(tuple(notincall)),
                    stacklevel=2,
                )
        return self._hookexec(self, self.get_hookimpls(), kwargs)
  • __call__的代码可以看到核心逻辑是最后一行的self._hookexec,我们可以发现这是_HookCaller的一个属性


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[pytest源码5]-pluggy深挖调用逻辑 的相关文章

  • 单元测试与 pytest

    在单元测试中 我可以setUp类中的变量 然后该类的方法可以选择它想要使用的任何变量 class test class unittest TestCase def setUp self self varA 1 self varB 2 sel
  • 如何在“pytest”框架中的固定装置中的“拆卸”中使用测试结果

    我正在尝试使用测试结果或状态来拆卸夹具 但是如果不使用 pytest 框架中的关键字 yield 我将无法找到代码 import pytest import requests pytest fixture def update result
  • 如何为异步流服务器编写 pytest 夹具?

    我一直在尝试学习 asyncio 但找不到任何创建可用于测试服务器代码的 pytest 夹具的示例 一旦服务器启动 我猜它会阻止其他一切 因此测试永远不会运行 pytest asyncio 是否有办法在单独的线程中运行固定装置或其他东西 还
  • pytest 固定装置 - 获取值并避免错误“直接调用固定装置'X'”

    我已将 pytest 更新到 4 3 0 现在我需要重新编写测试代码 因为不推荐直接调用固定装置 我对 unittest TestCase 中使用的固定装置有疑问 如何获取从固定装置返回的值而不是对函数本身的引用 例子 pytest fix
  • 使用 pytest 生成 csv 文件报告

    是否可以以某种方式在 csv 文件中生成测试执行报告 我使用 python selenium pytest 任何建议将不胜感激 我写了一个pytest csv https github com nicoulaj pytest csv插件 希
  • 使用conftest.py 与从专用模块导入装置

    我最近开始熟悉 pytest 以及如何使用conftest py定义在我的测试中自动发现和导入的装置 我很清楚如何conftest py工作原理以及如何使用它 但我不确定为什么这在某些基本场景中被认为是最佳实践 假设我的测试是这样构建的 t
  • Pytest 适用于旧的模拟,但不适用于 unittest.mock

    我正在将一些代码从 Python 2 移植到 3 并且py test玩得不好patch装饰器来自unittest mock 当我使用patch装饰器将模拟传递到测试函数的参数中 py test相反 将该参数解释为固定装置 并且无法设置测试
  • Pytest - 测试解析器错误:无法识别的参数

    我正在尝试测试一个非常简单的函数 由于多次尝试测试使用参数解析器作为参数的更复杂的函数而失败 来自 runfile py import argparse import os def get input args parser argpars
  • 自定义 pytest junitxml 失败报告

    我正在尝试内省测试失败并将附加数据包含到 junit xml 测试报告中 具体来说 这是对外部产品的一套功能测试 我想将产品的日志包含到故障报告中 使用找到的方法here https stackoverflow com questions
  • 模拟导入失败

    我该如何制作import pkg失败moduleA py 我可以打补丁pkg如果从中导入某些内容则会失败 否则不会失败 test py import os import moduleA from unittest mock import p
  • sqlalchemy:无法在拆卸时删除数据库

    我正在尝试使用 pytest 进行 sqlalchemy 但遇到以下问题 pytest fixture scope function def my session my db request from my models import Se
  • 使用 pytest 动态控制测试顺序

    我想使用逻辑来控制测试的顺序 该逻辑将在它们已经运行时动态地重新排序它们 我的用例是这样的 我使用 xdist 并行化我的测试 每个测试都使用来自公共且有限池的外部资源 某些测试比其他测试使用更多的资源 因此在任何给定时间 当只有一小部分资
  • 如何全局安装 Python(开发)依赖项,以便我不必在每个 venv 中重新安装它们?

    我希望在为每个项目创建的每个 venv 虚拟环境 中都可以使用一些 Python 依赖项 例如 black flake8 和 pytest 这可能吗 如果可以 如何实现 我想安装这三个once在我的主要 Python 安装下 我必须在启动新
  • Pytest 固定装置的范围“类”在每个方法上运行

    我正在尝试使用 Pytest 创建一个测试环境 这个想法是将测试方法分组到类中 对于每个班级 小组 我想附上config将要参数化的夹具 这样我就可以使用 配置 A 运行所有测试 然后使用 配置 B 运行所有测试 依此类推 但同时 我也想要
  • 从 PYCHARM 运行时使 PYTEST 更安静

    更新 下面显示的消息不受 pytest 各种 q 安静选项控制 它们来自 TeamCity 插件 请参阅下面我的回答 原文 我已经阅读了用于沉默 pytest 的现有堆栈溢出答案 但没有人告诉我如何沉默我收到的大量冗余 测试通过 消息 我有
  • 在 jupyter 笔记本中运行 pytest 测试函数

    我正在制作有关 python 测试选项的演示 我想要演示的技术之一是 pytest 我计划使用 jupyter ipython 笔记本进行演示 理想情况下 我希望能够在单元格中定义一个测试函数 然后使用 pytest 运行该函数 这样我就可
  • pytest 报告太多断言失败

    有没有办法让 pytest 只输出单行断言错误 当您的模块带有断言时 就会出现此问题 如果这些断言失败 它将转储导致断言失败的整个函数 gt assert r status code 200 f idtest tools now wrong
  • 如何定义一个 pytest 夹具供给定测试子目录中的所有测试使用?

    给定一个目录tests有几个子目录 每个子目录都包含测试模块 如何创建一个pytest仅在特定子目录中找到的每个测试之前运行的固定装置 tests init py subdirXX test module1 py test module2
  • 如果多个测试有特定异常,则停止 pytest 测试

    我想使用停止测试套件pytest exit 如果任何测试因特定异常而失败 例如 50 个测试 其中任何一个都可能在某个时刻因该异常而失败 如果这些测试中至少有 2 个测试因该异常而失败 我想停止执行 我试图保留一个全局计数器 一个固定装置s
  • 在 pytest 中,如何判断测试是否失败? (来自“请求”)

    我正在使用 Selenium 和 PYTEST 来测试网站 我想在测试失败时 并且仅在测试失败时 截取页面的屏幕截图 有什么办法可以做到这一点吗 当谈到这个时 文档很安静 或者我找不到它 我认为它会是这样的 request function

随机推荐

  • vue脚手架搭建、介绍和初始页面的构造(图文详细)

    文章目录 什么是vue脚手架 前置环境的安装 配置node js 安装脚手架vue cli 创建项目 项目配置 项目结构 修改初始页面 样式的less语法 什么是vue脚手架 Vue脚手架 Vue CLI 是一个官方提供的命令行工具 用于快
  • 【文件上传】绕过总结

    一般绕过会分为黑名单绕过 白名单绕过 特殊类型绕过 以下为文件上传后缀绕过 黑名单绕过 1 大小写绕过 eg a JSP a Jsp a jsP a jSP等等 2 空格绕过 一般保存文件名前后带空格 保存时都会被忽略掉 而php在传输中
  • linux_fasync的总结

    fasync的总结 我们知道 驱动程序运行在内核空间中 应用程序运行在用户空间中 两者是不能直接通信的 但在实际应用中 在设备已经准备好的时 候 我们希望通知用户程序设备已经ok 用户程序可以读取了 这样应用程序就不需要一直查询该设备 的状
  • window系统配置PCL的简化方法(不需要复制一百多个依赖项目名称,直接导入配置表)

    1 下载文件 百度网盘 链接 https pan baidu com s 1WQQ8kaDilaagjoK5IrYZzA 提取码 1111 注意 直接解压在E盘 不解压在E盘也可以 后续替换环境变量和属性表文件内的地址就行 props文件
  • 【独家发布】行业深度报告:《风口上的半导体

    作为关乎国民经济和国家安全的战略型行业 半导体行业在我国占据重要地位 尤其在美国对我国半导体核心产品和零部件实行技术封锁的大背景下 国产芯片亟需实现独立自主并获得长足发展 一场全产业链国产化替代风潮正愈演愈烈 与此同时 半导体行业也收获了诸
  • 使用Python,OpenCV的Meanshift 和 Camshift 算法来查找和跟踪视频中的对象

    使用Python OpenCV的Meanshift 和 Camshift 算法来查找和跟踪视频中的对象 1 效果图 2 源码 2 1 MeanShift 2 2 Camshift Continuously Adaptive Meanshif
  • vs2019登录提示“我们无法刷新此账户的凭证”

    打开代理服务器设置 查看自动设置代理与手动设置代理的开关有没有被自动打开 如果有的话把它关掉 就能正常登录了
  • D - 整数变换问题

    整数变换问题 题意 问我们最少经过多少次变换可以将n转化为m 题解 这个题我们很容易想到就是用dfs 但是数据范围也很明显不能用直接的暴力 所以我们需要剪枝 我们假设用最原始的暴力 就是每次循环两种情况一直到最后 这样的暴力很机械 很盲目
  • 华为OD机试真题-选修课-2023年OD统一考试(B卷)

    题目描述 现有两门选修课 每门选修课都有一部分学生选修 每个学生都有选修课的成绩 需要你找出同时选修了两门选修课的学生 先按照班级进行划分 班级编号小的先输出 每个班级按照两门选修课成绩和的降序排序 成绩相同时按照学生的学号升序排序 输入描
  • 百度地图,如何成为智能化位置服务平台

    深几度 产业数字化 撰稿 吴俊宇 编辑 吴俊宇 审阅 梁欣婷 摘要 对行业而言 百度地图在当下的角色转变具备代表性意义 这是产业数字化浪潮下的一次成功转型 在过去移动生态下诞生的产品 在今天都值得深入挖掘其中的数据价值 这些价值可以延展至国
  • 安卓期末大作业-图书馆借书系统、图书借阅app(附下载链接)

    安卓期末大作业 图书馆借书系统 借书APP 可以注册登录 保存数据记录 含源码和导出app 运行截图 安卓期末大作业 图书借阅APP 老师给了95分 可以注册登录 借阅书籍 还书 含数据库存储借书记录 导入AndroidStudio即可使用
  • 信标链:以太坊2.0的新起点

    原创 市后诸葛 虽然以太坊2 0依旧用 以太坊 命名 但以太坊1 0和以太坊2 0其实是完全不同的两种架构 以太坊1 0和2 0的差别 远不是POW和POS的区别 在以太坊2 0里面 基础链就是 信标链 在真正的以太坊2 0里面 是只有po
  • @With,@Accessors(chanins=true),@ExtensionMethod——Lombok常用注解

    目录 一 With 很少用 二 Accessors 非常好用 一 fluent 布尔型 二 chain 布尔型 三 ExtensionMethod 实验阶段 一 With 很少用 这个注解可以用在类上也可以用在单个的成员变量上 使lombo
  • C++中的指针概念梳理

    在C 中指针通常难以理解 即使是有经验的程序员也常常因为调试指针引发的错误而备受折磨 笔者在学习C 时常常被指针弄得晕头转向 于是决定对指针的概念做一次梳理 希望本文能够对C 入门者有些许作用 1 指针的概念 指针 pointer 是 指向
  • Electron 实现切换暗_亮模式与主题

    文章末尾附上仓库地址 清单 模板基于 electron vite vue vue3 ts vite 组件库 element plus hooks库 vueuse useElementPlusTheme 初始化工程 使用 electron v
  • Tensorflow(二)MNIST数据集分类

    1 获取数据集 有两种方式可以得到数据集 第一是直接通过mnist input data read data sets MNIST data one hot True 进行联网下载 但这个方法可能很慢或者连接不到服务器 所以推荐使用第二个
  • 富文本 解决HTML字段

    转载自 https blog csdn net qq 36467463 article details 79072428 RichText Android平台下的富文本解析器 流式操作 低侵入性 支持Html和Markdown格式文本 支持
  • USRP B210常用软件安装

    系统需求 硬件配置 intel i5或以上 USB3 0接口 树莓派也可以 操作系统 ubuntu 20 04 ubuntu 18 04环境配置有些差异 如果按照这里的命令操作可能会出问题 可以用虚拟机吗 当然没问题 虚拟机是多好的发明 等
  • Flutter实现CombineExecutor进行多个异步分组监听,监听第一个异步执行的开始和最后一个异步执行结束时机。

    1 场景 我们在调用接口时 很多时候会同时调用多个接口 接口都是异步执行 我们很难知道调用的多个接口哪个会最后执行完成 我们有时候需要对最后一个接口执行完成的时机监听 所以基于该需求 设计了CombineExecutor 对类似的需求进行监
  • [pytest源码5]-pluggy深挖调用逻辑

    前言 本篇将详细分析如何通过PluginManager hook调用plugin实现 个人拙见 有错请各位指出 如果的我的文章对您有帮助 不符动动您的金手指给个Star 予人玫瑰 手有余香 不胜感激 GitHub pytest pluggy