pytest钩子函数(三):用例收集钩子

前言

pytest这个框架提供了非常多的钩子。通过这些钩子我们可以对pytest 用例收集、用例执行、报告输出等各个阶段进行干预,根据需求去开发对应的插件,以满足自己的使用场景。

01 什么是钩子函数?

钩子函数在pytest称之为Hook函数,它pytest框架的开发者,为了让用户更好的去扩展开发预留的一些函数。而预留的这些函数,在整个测试执行的生命周期中特定的阶段会自动去调用执行。如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K8HqjW5y-1689820443345)(/api/attachments/426316)]

pytest中的钩子函数按功能一共分为6类:引导钩子,初始化钩子、用例收集钩子、用例执行钩子、报告钩子、调试钩子。

详细文档可以查看pytest官方文档https://docs.pytest.org/en/latest/reference/reference.html?highlight=hook#hooks

02 用例收集钩子

2.1 pytest_collection

pytest_collection设置pytest收集用例执行的流程,这个钩子函数一般不需要重写,除非你想自己制定pytest用例收集的流程。

参数:

  • session:pytest 会话对象。
    触发时机:
  • 收集用例之前执行,执行该钩子进行用例收集。

pytest默认的用例收集流程为:

  1. 以 session作为初始收集器 ,按照下面的流程,收集所有测试用例

    • 执行pytest_collectstart(collector)开始收集
    • 执行report = pytest_make_collect_report(collector),创建一个收集报告对象
    • 收集过程中,如果出现交互异常,则执行pytest_exception_interact(collector, call, report)
    • 对收集的节点进行判断,如果是用例执行pytest_itemcollected(item),如果是收集器则进行递归处理。
    • 执行pytest_collectreport(report),处理收集的报告
  2. 对收集到的用例进行修改。

    • 执行pytest_collection_modifyitems(session, config, items)
  3. 整理收集到的测试用例。

    • 执行pytest_collection_finish(session)
  4. 将收集的用例保存到session.items中。

  5. 将收集的用例数量设置为 session.testscollected 属性。

2.2 pytest_ignore_collect

参数:

  • collection_path: 路径。
  • config: pytest配置对象。

触发时机:

  • 对文件和目录进行收集之前会执行改钩子函数。

返回值:

  • 布尔值(会根据返回值为True还是False来决定是否收集改路径下的用例)。

2.3 pytest_collect_file

搜索测试文件路径的钩子函数。

参数:

  • file_path : 收集的路径。
  • parent : 父级目录路径。

触发时机:

  • 对每个路径进行收集之前会执行改钩子函数。

返回值:

  • 布尔值(会根据返回值为True还是False来决定是否收集该路径下的用例)。

2.4 pytest_pycollect_makemodule

收集测试模块的钩子函数,每个测试模块都会调用该钩子函数进行收集。

参数:

  • module_path : 模块路径。

触发时机:

  • 搜索测试模块触发的钩子函数。

返回值:

  • 模块。

2.5 pytest_pycollect_makeitem

收集模块中用例的钩子函数,对模块中的用例进行收集。

参数:

  • collector: 模块对象。
  • name: 名称。
  • obj: 对象。

触发时机:

  • 对文件和目录进行收集之前会执行改钩子函数。

2.6 pytest_generate_tests

根据用例参数化传入的参数数量生成测试用例,生成测试用例。
参数:

  • metafunc : 元函数。

触发时机:

  • 对用例方法进行参数化,生成用例。

2.7 pytest_make_parametrize_id

参数化生成用例时,生成parametrize_id(默认情况下参数化生成的用例名由原用例名和parametrize_id组成),可以通过该钩子函数修改生成用例的方法名。

参数:

  • config : pytest 配置对象。
  • val : 参数化值。
  • argname: pytest 生成的自动参数名称。

触发时机:

  • 对用例方法进行参数化,生成用例名称。

返回值:

  • 参数化的id。

2.8 pytest_markeval_namespace

收集用例时 评估 被xfail或skipif标记用例的条件,改变测试跳过的钩子。

参数:

  • config : pytest 配置对象。

触发时机:

  • 收集的用例被xfail或skipif标记用例时触发。

2.9 pytest_collection_modifyitems

用例收集完成后,可以通过该钩子函数修改用例的顺序,删除或以其他方式修改测试用例。
参数:

  • session: pytest会话对象。
  • config : pytest 配置对象。
  • items: 测试用例列表。

触发时机:

  • 用例收集完后调用该钩子函数。

2.10 pytest_collection_finish

参数

  • session: pytest会话对象。

触发时机:

  • 在收集完用例和修改收用例集之后调用。

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

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

相关文章

Redis缓存击穿

Redis缓存击穿是指在使用Redis作为缓存时,某个热点数据过期或不存在,导致大量请求直接打到后端存储系统(例如数据库),使得后端系统压力骤增,性能下降的情况。这种情况通常发生在热点数据失效的瞬间。 缓存…

【高阶数据结构】B树

文章目录 一、B-树1. 常见的搜索结构2. B树概念3. B-树的查找4. B-树的插入分析 二、B树和B*树1. B树2. B*树 三、B-树的应用1. 索引2. MySQL索引简介2.1 MyISAM2.2 InnoDB 一、B-树 1. 常见的搜索结构 种类数据格式时间复杂度顺序查找无要求O(N)二分查找有序O(log2N)二叉搜索…

TCP/IP网络编程 第十九章:Windows平台下线程的使用

内核对象 要想掌握Windows平台下的线程,应首先理解“内核对象”(Kernel Objects)的概念。如果仅介绍Windows平台下的线程使用技巧,则可以省略相对陌生的内核对象相关内容。但这并不能使各位深入理解Windows平台下的线程。 内核对…

RocksDB架构

1、rocksdb是什么? RocksDB中文网 | 一个持久型的key-value存储 rocksdb是一种KV存储引擎,常用于数据库存储数据,无法直接使用,没有提供sql命令,通过调用rocksdb提供的api进行数据库的读写等操作。 rocksdb是以leveldb为基础开…

Linux一些问题,结合gpt,自己复习用

(一)请介绍linux以及它和windows的区别 🐧 Linux是一个开源的操作系统,它基于UNIX,并具有强大的自由度和灵活性。它被广泛用于服务器环境和嵌入式系统中。Linux有许多不同的发行版,例如Ubuntu、Debian、Fe…

聊聊spring-cloud的负载均衡

聊聊spring-cloud的负载均衡 1. 选择合适的负载均衡算法2. 合理设置超时时间3. 缓存服务实例列表4. 使用断路器5. 使用缓存Spring Cloud负载均衡组件对比RibbonLoadBalancerWebClient对比 总结 在微服务架构中,负载均衡是非常重要的一个环节,可以有效地提…

S32K144 GPIO外设分析

1. S32K144 GPIO外设特性 下面的内容来自于S32K用户手册的翻译,或者网上关于S32K系列的一些pdf文件介绍。有些内容可能会出现理解不到位或者翻译错误方面,如果大家有疑问最好可以查阅用户手册。 GPIO和PORT的数量 从用户手册,对于PCR&#x…

React Dva项目中路由跳转的方法

接下来 我们来看看路由跳转 先打开 我们Dva项目 然后我们需要在routes 下创建一个自己的路由,如果您尚未掌握在Dva项目中创建路由,可以参考我的文章 React 在Dva项目中修改路由配置,并创建一个自己的路由 然后 我的项目有两个路由 router.js…

ASFF Learning Spatial Fusion for Single-Shot Object Detection 论文学习

1. 解决了什么问题? 目标检测取得了显著成绩,但是检测不同尺度的目标仍然是一个挑战。金字塔或多层级特征是解决目标检测中尺度变化的常用手段。但对于单阶段目标检测器而言,各特征尺度之间不一致性制约了算法的表现。与图像金字塔相比&…

VMware Workstation 18 Tech Preview - 增强的 Windows 11 虚拟机安全性

VMware Workstation 18 Tech Preview - 增强的 Windows 11 虚拟机安全性 VMware Workstation Tech Preview 2023 请访问原文链接:https://sysin.org/blog/vmware-workstation-18/,查看最新版。原创作品,转载请保留出处。 作者主页&#xf…

OpenAI的Function calling 和 LangChain的Search Agent

OpenAI的Function calling openai最近发布的gpt-3.5-turbo-0613 和 gpt-4-0613版本模型增加了function calling的功能,该功能通过定义功能函数,gpt通过分析问题和函数功能描述来决定是否调用函数,并且生成函数对应的入参。函数调用的功能可以…

Pytorch个人学习记录总结 07

目录 神经网络-非线性激活 神经网络-线形层及其他层介绍 神经网络-非线性激活 官方文档地址:torch.nn — PyTorch 2.0 documentation 常用的:Sigmoid、ReLU、LeakyReLU等。 作用:为模型引入非线性特征,这样才能在训练过程中…

Java面试题总结记录(3)—— Spring篇

1、什么是Spring? Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对 构建J2EE平台的web应用。 Spring 框架目标是简化Java企业级应用开发,并通过 POJO为基础的编程 模型促进良好的编程习惯 2、你们项…

Socks5代理在爬虫与HTTP应用中的重要性

IP代理的类型及原理常见的IP代理类型有HTTP代理、Socks代理等,本文重点关注Socks5代理。Socks5代理是一种网络协议,可以实现传输层的数据转发,使客户端在不直接连接服务器的情况下与其进行通信。其原理在于接收客户端的请求,然后将…

数组和链表、栈和队列的区别

1.数组和链表的区别 数组和链表是两种不同的数据结构,它们在存储和访问数据上有很大的区别。 1. 存储方式: 数组是一种连续内存空间的数据结构,其元素在内存中是按顺序存储的,通过索引可以直接访问元素。链表是由若干个节点组成…

[k8s] command和args

k8s中的command和args可以覆盖docker镜像中的entrypoint和cmd。其中,k8s-command可以覆盖docker-entrypoint,k8s-args可以覆盖docker-cmd。参考Difference between Docker ENTRYPOINT and Kubernetes container spec COMMAND? 了解一下entrypoint的意义…

Spring 更简单的读取和存储对象

目录 1.存储 Bean 对象 1.1 前置⼯作:配置扫描路径 1.2 添加注解存储 Bean 对象 1.2.1 Controller(控制器存储) 1.2.2 Service(服务存储) 1.2.3 Repository(仓库存储) 1.2.4 Component&a…

Python学习 - Request库

学习和使用 引入 import requests基本语法 Request常用方法总结 responserequests.get(url,params,**kwargs) responserequests.post(url,params,**kwargs)参数含义url目标URL地址params请求发起携带的数据kwargs控制请求访问的参数,使用后可以加入到requests请…

C++---string

String C语言中的字符串和C中的string类标准库中的string类string类的常用接口string类对象的常见构造string类对象的容量操作string类对象的访问及遍历操作 C语言中的字符串和C中的string类 在C语言中,字符串是一个字符数组,它以空字符\0结尾&#xff…

【数据结构】朴素模式匹配 KMP算法

🎇【数据结构】朴素模式匹配 & KMP 算法🎇 🌈 自在飞花轻似梦,无边丝雨细如愁 🌈 🌟 正式开始学习数据结构啦~此专栏作为学习过程中的记录🌟 文章目录 🎇【数据结构】朴素模式匹配 & K…