背景

pytest,python全功能测试框架(用某句名言,甩unittest几条街),钩子函数、pytest插件、pytest装饰器都能扩展pytest。

提及pytest高级用法,不得不说pytest插件,例如assert断言失败继续断言,就是插件办到的。

只知道用插件、用hook远远不够,如果能知道它的原理,自行的开发插件,才能称为懂框架。

测试开发进阶必备!手把手教你定制pytest插件,效率提升200% 插件开发

经历

* pytest,hook函数是什么原理?插件又是什么原理?

用的时候,百度用上,没有顾上去想,就比如,unittest收集用例的原理你会去细想吗?

就这样沉寂很久很久,突然有一天被问到conftest.py的函数名称的命名,不知道到函数从哪里?更不知道这个函数的意思?

带着问题思考了很久——》所谓hook函数就是,pytest运行过程中暴露给使用者使用的,你愿意用,结合自身的情况那就重写。

就像是机器处理运行的按钮之外,还有暴露的接口,这些接口专门对接HDMI、耳机、USB?

百度一定会找到有哪些但是必须要知道的是,在框架的什么地方。如下

\Lib\site-packages\_pytest\hookspec.py文件

而所谓的插件?也是如上所说的接口来实现了,只不过加了命令行的参数控制。来看下allure_pytest源码

 从这句话就能看出,allure-pytest增加命令行参数的方法其实调用的是pytest暴露开发者的接口pytest_addoption

把这些hook函数调用封装起来打包,上传到pypi,再通过pip install。这变成了插件!

---------------------------------

搞懂了,Hook函数、插件、pytest.fixture。什么本地插件(conftest.py)、外部插件(allure-pytest)、内置插件(hook函数)、自定义插件?其实就是这样

最后提及我的插件,极其简单,就随意命名了:pytest-testpluggy

pip install 吧

测试开发进阶必备!手把手教你定制pytest插件,效率提升200% 插件开发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93736.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93736.shtml
英文地址,请注明出处:http://en.pswp.cn/web/93736.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cesium中实时获取鼠标精确坐标和高度

/*** 获取鼠标位置的三维坐标(包含高度信息)* @param {Cesium.Cartesian2} position 鼠标位置* @returns {Cesium.Cartesian3|null} 三维坐标*/ function getMousePosition(position) {if (!position) return null;

Netty 集成 protobuf

什么是 Protobuf Protobuf(Protocol Buffers)是 Google 开发的一种高效、语言中立、平台中立的序列化协议,用于在不同系统或语言之间传输结构化数据。开发者通过 .proto 文件定义消息结构,再使用生成的类进行序列化(转为紧凑的二进制数据)和反序列化(还原为对象),相比…

程序调用 AI 大模型 -- Java

程序调用 AI 大模型 – Java 1、SDK 接入 安装阿里云百炼SDK_大模型服务平台百炼(Model Studio)-阿里云帮助中心 <dependency><groupId>com.alibaba</groupId><artifactId>dashscope-sdk-java</artifactId><!-- 请将 the-latest-version 替…

VMware 虚拟机完全使用教程:从基础到高级应用

VMware 虚拟机完全使用教程&#xff1a;从基础到高级应用 一、引言 在当今数字化时代&#xff0c;计算机技术的飞速发展使得硬件性能不断提升&#xff0c;但同时也带来了资源浪费和管理复杂等问题。虚拟机技术应运而生&#xff0c;它能够在一台物理计算机上模拟出多台独立的计…

函数对象 vs 函数指针 vs lambda:该用哪个才高效?

博主介绍&#xff1a;程序喵大人 35 - 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章&#xff0c;首发gzh&#xff0c;见文末&#x1f447;&#x…

Java团队项目开发规范——对象分层规范

分层与对象命名规范如上图所示&#xff0c;系统划分成3个层&#xff1a;Controller层&#xff0c;Service层&#xff0c;Domain层 Controller层&#xff1a; Controller层是接入层&#xff0c;提供对外或者前端的接口&#xff0c;该层主要作用是提供对外接口的封装。基于CQRS分…

低功耗模式

1. 什么是低功耗&#xff1f;低功耗模式&#xff1a;MCU 暂停部分时钟/外设&#xff0c;降低电流消耗&#xff0c;等待外部事件&#xff08;中断/复位/唤醒&#xff09;再恢复运行。应用场景&#xff1a;电池供电设备&#xff08;传感器、手持设备、IoT 节点&#xff09;——延…

GPT-5 官方前瞻:它将如何重塑你的数字生活?

你是否曾想过&#xff0c;有一天你的浏览器不再是一个被动等待指令的工具&#xff0c;而是一个能主动为你分忧解难的智能伙伴&#xff1f;OpenAI 的 CEO Sam Altman 最近的发言&#xff0c;以及关于 GPT-5 的种种迹象&#xff0c;都预示着这个未来比我们想象的更近。这不仅是一…

驱动开发系列65 - NVIDIA 开源GPU驱动open-gpu-kernel-modules 目录结构

一:OS相关部分 kernel-open/ 内核接口层 kernel-open/nvidia/ nvidia.ko 的接口层,负责GPU初始化,显存管理,PCIe通信,中断处理,电源管理等底层功能。 kernel-open/nvidia-drm/ nvidia-drm.ko 的接口层,提供标准图形接口,让Xorg、Wayland、Kwin、GNOME等桌面环境能够通…

GPT-4.1旗舰模型:复杂任务的最佳选择及API集成实践

GPT-4.1旗舰模型&#xff1a;复杂任务的最佳选择及API集成实践 概述 GPT-4.1作为新一代旗舰大模型&#xff0c;凭借其卓越的智能表现、强大的跨领域问题解决能力&#xff0c;成为复杂任务处理的首选。本文将详细解析GPT-4.1的核心能力、接口用法、计费方式、功能对比及API集成…

paimon保姆级教程简介

还在纠结 Flink 配 Hudi 还是 Iceberg&#xff1f;别选了&#xff0c;快来试试 Flink 的“天选之子”—— Apache Paimon&#xff01; 忘掉复杂的 Lambda 架构&#xff0c;拥抱真正的流批一体。我们的 Paimon 视频教程&#xff0c;带你用 Flink 原生湖仓格式&#xff0c;轻松构…

Transformer中的编码器和解码器是什么?

今天&#xff0c;我们来具体介绍Transformer的架构设计。 一个完整的Transformer模型就像一个高效的语言处理工厂&#xff0c;主要由两大车间组成&#xff1a;编码车间和解码车间。 首先来看这幅“世界名画”&#xff0c;你可以在介绍Transformer的场景中常常看到这幅图&#x…

uniapp 应用未安装:软件包与现有软件包存在冲突

应用未安装&#xff1a;软件包与现有软件包存在冲突常见原因包名&#xff08;AppID&#xff09;没变&#xff0c;但签名证书不同安卓会把同一包名的 App 当成同一个应用。如果你之前安装的版本用了 A 签名&#xff0c;现在你打包用了 B 签名&#xff0c;就会冲突&#xff0c;导…

MyCAT2的主从配置

1.创建数据源重置配置&#xff1a;/* mycat:resetConfig{} */添加读写的数据源/* mycat:createDataSource {"dbType": "mysql","idleTimeout": 60000,"initSqls": [],"initSqlsGetConnection": true,"instanceType&quo…

个人介绍CSDNmjhcsp

年龄&#xff1a;12岁 住址&#xff1a;山东潍坊 看的这&#xff0c;有人懵了&#xff0c;访问量4.8万的mjhcsp竟然是一个小孩&#xff01; 好吧&#xff0c;我的强项其实是C&#xff0c;但是C发表文章很少&#xff0c;我平常写一写java&#xff0c;云原生&#xff0c;Deeps…

01-Docker-简介、安装与使用

1. docker简介 Docker 是一个应用打包、分发、部署的工具你也可以把它理解为一个轻量的虚拟机&#xff0c;它只虚拟你软件需要的运行环境&#xff0c;多余的一点都不要&#xff0c;而普通虚拟机则是一个完整而庞大的系统&#xff0c;包含各种不管你要不要的软件。 2. 相关概念 …

阿里云参数配置化

阿里云参数配置化 一、问题描述 当我们直接在AliOSSUtils.java中对所需的阿里云OSS相关参数进行赋值时&#xff0c;当相关参数发生改变&#xff0c;但是又在多次进行了赋值这些参数&#xff0c;那么就需要逐一进行修改&#xff0c;所以我们直接在SpringBoot项目的配置文件appli…

Diamond开发经验(1)

前言: 学习Lattice的芯片开发的过程中&#xff0c;很多实际开发过程中遇到的问题是没办法绕过的&#xff0c;虽然我今天被绕了一天&#xff08;此句多余&#xff0c;单纯记录美好心情哈哈哈哈&#xff09;将这些解决方法梳理成文章供大家参考&#xff0c;十个问题组成一篇文章。…

神经网络训练过程详解

神经网络训练过程详解 神经网络训练过程是一个动态的、迭代的学习过程&#xff0c;接下来基于一段代码展示模型是如何逐步学习数据规律的。 神经网络拟合二次函数&#xff1a;代码详解 下面将详细解释这段代码&#xff0c;它使用神经网络拟合一个带有噪声的二次函数 y x 2x …

LeetCode100-560和为K的子数组

本文基于各个大佬的文章上点关注下点赞&#xff0c;明天一定更灿烂&#xff01;前言Python基础好像会了又好像没会&#xff0c;所有我直接开始刷leetcode一边抄样例代码一边学习吧。本系列文章用来记录学习中的思考&#xff0c;写给自己看的&#xff0c;也欢迎大家在评论区指导…