pytest钩子函数(四):用例执行钩子

前言

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

01 什么是钩子函数?

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

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

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

02 用例执行钩子

2.1 pytest_runtestloop

收集完成后执行主运行测试循环的钩子函数。
默认钩子实现对会话 ( ) 中收集的所有项目执行 runtest 协议session.items,除非收集失败或collectonly设置了 pytest 选项。如果在任何时候pytest.exit()调用,循环将立即终止。如果在任何点session.shouldfail或session.shouldstop设置,循环在当前项目的运行测试协议完成后终止。

参数:

  • session:pytest 会话对象。

触发时机:

  • 用例收集完后执行。

2.2 pytest_runtest_protocol

这个钩子函数是用来执行单个用例的,对单个测试项执行 runtest 协议。
参数:

  • Item:执行的用例。
  • nextitem: 指定的下一条执行的测试用例。

pytest默认的runtest协议为如下三个阶段:
  1. 设置阶段:这个阶段主要执行用例:前置夹具。

    • call = pytest_runtest_setup(item)
    • report = pytest_runtest_makereport(item, call)
    • pytest_runtest_logreport(report)
    • pytest_exception_interact(call, report)
  2. 调用阶段:这个阶段负责执行测试用例。

    • call = pytest_runtest_call(item)
    • report = pytest_runtest_makereport(item, call)
    • pytest_runtest_logreport(report)
    • pytest_exception_interact(call, report)
  3. 拆解阶段: 这个阶段主要执行用例:后置夹具。

    • call = pytest_runtest_teardown(item, nextitem)
    • report = pytest_runtest_makereport(item, call)
    • pytest_runtest_logreport(report)
    • pytest_exception_interact(call, report)

2.3 pytest_runtest_logstart

单个项目运行 runtest 协议开始时调用。

参数:

  • nodeid : 完整的节点ID。
  • location :包含如下三个值的元组(filename, lineno, testname) ,分别为文件名、行号、用例名称。

2.4 pytest_runtest_logfinish

在单个项目运行 runtest 协议结束时调用。

参数:

  • nodeid : 完整的节点ID。
  • location :包含如下三个值的元组(filename, lineno, testname) ,分别为文件名、行号、用例名称。

2.5 pytest_runtest_setup

在运行runTest协议时,设置阶段执行的钩子函数。该钩子函数默认实现的行为是负责执行前置的测试夹具,以及获取前置夹具中yeild返回的数据。

参数:
Item:执行的用例。

2.6 pytest_runtest_call

在运行runTest协议时,调用阶段执行的钩子函数,该钩子函数的默认实现的行为是执行:item.runtest()。

参数:
Item:执行的用例。

2.7 pytest_runtest_teardown

在运行runTest协议时, 拆卸阶段 执行的钩子函数。该钩子函数默认实现的行为是负责执行后置的测试夹具。

参数:

  • Item:执行的用例。
  • nextitem: 执行的下一条用例。

2.8 pytest_runtest_makereport

该钩子函数,在用例执行runTest协议的过程中,每个阶段都会调用一次。期作用是为了创建测试执行记录器,记录每个阶段执行的结果。

参数:

  • Item:执行的用例

  • call: 用例执行的阶段。

    为了更深入地理解,您可以查看这些钩子的默认实现,也可以查看_pytest.runner其中_pytest.pdb的交互_pytest.capture 及其输入/输出捕获,以便在发生测试失败时立即进入交互式调试。

2.9 pytest_pyfunc_call

该钩子函数的作用是为了调用底层的测试执行函数。

参数:

  • pyfuncitem: 最终执行的用例函数。

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

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

相关文章

第四讲:MySQL中DDL一些基本数据类型及表的创建、查询

目录 1、创建表:2、DDL一些基本数据类型: 1、创建表: 部分单词及解析: 1、tables:表 2、comment:评论,解释 3、gender:性别 4、neighbor:邻居 1、创建表:(注:在自定义数据库操作,…

ElasticSearch初探

ElasticSearch 是什么? ElasticSearch是一个分布式、Restfui 风格的搜索和数据分析引擎,国内简称ES, ElasticSearch 是用Java开发的,底层基于Lucene,Lucene是一种全文的索引库,直接采用Lucene是比较麻烦的,Elasticsearch在Lucene的基础上开发了一个强大的搜索引擎。 ELK…

第四十六天

●运算符也叫操作符 通过运算符可以对一个或多个值进行运算,并获取运算结果 比如:typeof就是运算符,可以来获得一个值的类型 它会将该值的类型以字符串的形式返回 number string boolean undefined object ●算数运算符 当对非Number类型的…

vscode开发Go和Java

vscode开发Go和Java 最新最全 vscode 插件推荐可以参考: https://zhuanlan.zhihu.com/p/623580867 1、公共插件安装 下面是个人使用的插件: # 中文插件 Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code https://marketplace…

基于人工智能的房地产行业的ChatGPT能提供什么样的改进解决方案?

解决方案描述自动化客户服务通过自然语言处理和聊天机器人技术,实现自动化的客户咨询和问题解答。这可以提高客户满意度,节省人力资源,并实现全天候的客户支持。数据分析与预测利用机器学习和数据分析技术,对房地产市场数据进行深…

spring中bean实例化的三种方式 -- Spring入门(二)

文章目录 前言1.Bean实例化简介2.bean的实例化 -- 构造方法3.bean的实例化 -- 静态工厂实例化4.bean实例化 -- 实例工厂和FactoryBean5.三种bean实例化方式的区别 总结 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。…

Hive窗口函数大全

Hive窗口函数 一、偏移量函数laglead 二、窗口分析函数first_valuelast_value 三、排序函数rankdense_rankrow_number 一、偏移量函数 lag 语法:lag(col,n,default_val) 返回值:字段类型 说明:往前第n行数据。 lag(column字段,第…

Leetcode 112. 路径总和

题目链接:https://leetcode.cn/problems/path-sum/description/ 思路 递归,先序遍历二叉树,每遍历一个节点便减去当前存储值(targetSum targetSum - root.val);当到达某个节点等于targetSum (targetSum…

labview 子画面插入面板

1.前言 在前面一篇文章中描述了弹框式显示子画面, labview 弹窗(子vi)_weixin_39926429的博客-CSDN博客 本文介绍插入式显示子画面。 本文的主题在以前的文章中介绍过, labview 插入子面板_labview插入子面板_weixin_39926429的博客-CSDN博客 借用…

机器学习算法分类

机器学习根据任务的不同,可以分为监督学习、无监督学习、半监督学习、强化学习。 1. 无监督学习 训练数据不包含任何类别信息。无监督学习里典型例子是聚类。要解决的问题是聚类问题和降维问题,聚类算法利用样本的特征,将具有相似特征的样本…

微服务 云原生:搭建 K8S 集群

为节约时间和成本,仅供学习使用,直接在两台虚拟机上模拟 K8S 集群搭建 踩坑之旅 系统环境:CentOS-7-x86_64-Minimal-2009 镜像,为方便起见,直接在 root 账户下操作,现实情况最好不要这样做。 基础准备 关…

React18和React16合成事件原理(附图)

💡 React18合成事件的处理原理 “绝对不是”给当前元素基于addEventListener做的事件绑定,React中的合成事件,都是基于“事件委托”处理的! 在React17及以后版本,都是委托给#root这个容器(捕获和冒泡都做了…

【java】java中注解的简介,如何自定义注解,有哪些类型,有什么作用

java注解 注解的定义 Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。 首先要明确一点的是,注解并没有实际的作用&…

八股文(消息队列)

文章目录 1. RabbitMQ特点2. 如何保证消息的可靠性3. RabbitMQ消息的顺序性4. 实现RabbitMQ的高可用性5. 如何解决消息队列的延时以及过期失效问题?6. RabbitMQ死信队列7. RabbitMQ延迟队列8.RabbitMQ的工作模式9. RabbitMQ消息如何传输10. 核心概念10.1 生产者和消…

RNNLSTM

文章目录 前言引言应用示例-槽填充(slot filling)-订票系统二、循环神经网络(RNN)三、Long Short-term Memory (LSTM)LSTM原理[总结](https://zhuanlan.zhihu.com/p/42717426)LSTM例子lstm的训练RNN不但可以N2NMany2One(输入是一个矢量序列,但输出只有一个矢量)Many2Ma…

SpringBoot整合Spring Security实现权限控制

文章目录 Spring Security介绍Spring Security案例1、快速搭建一个springboot工程2、导入SpringSecurity整合springboot工程3、认证3.1、登录流程校验3.2、入门案例的原理3.3、实现思路3.4、实现认证流程(自定义)3.5、正式实现3.5.1 实现数据库的校验3.5…

ucore lab3 虚拟内存管理

ucore lab3 虚拟内存管理 首先查看有关该lab的数据结构 vma: 描述了一块连续的虚拟内存空间,保证start<end&#xff0c;list_link是一个双向链表&#xff0c;按照从小到大的顺序把一系列用vma_struct表示的虚拟内存空间链接起来&#xff0c;并且还要求这些链起来的vma_str…

python node Ubuntu 安装软件、删除软件 、更新软件 中的 软件源概念

在Node 用npm 安装软件 在Python 用 pip 安装软件 在Ubuntu 用 apt 、apt-get 、snap 安装软件 因为这三款软件 都是国外的&#xff0c; 软件包&#xff08;模块&#xff09;都放在国外的&#xff0c; 安装 、更新 特别慢 Node中配置 下载源 在 node 中 要配置 下载的的地址…

【C语言初阶】指针的运算or数组与指针的关系你了解吗?

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《快速入门C语言》《C语言初阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 &#x1f4cb; 前言&#x1f4ac; 指针运算&#x1f4ad; 指针-整数&#x1f4ad; 指针-指针&#x1f4ad; 指针…

关于K8s的Pod的详解(一)

关于K8s的Pod的详解&#xff08;一&#xff09; Pod和API server的通信加快Pod启动更改Pod的资源Pod 的持久卷的单个访问模式Pod 拓扑分布约束Pod 拓扑分布中的最小域数 Pod 作为k8s创建&#xff0c;调度&#xff0c;管理的基本单位。由上级的Controller对Node上安装的Kubelet发…