学习才是测试猿的永动力!超详细的 pytest 钩子函数 之初始钩子和引导钩子来啦

2023-11-18

前 言

前几篇文章介绍了 pytest 点的基本使用,学完前面几篇的内容基本上就可以满足工作中编写用例和进行自动化测试的需求。从这篇文章开始会陆续给大家介绍 pytest 中的钩子函数,插件开发等等。仔细去看过 pytest 文档的小伙伴,应该都有发现 pytest 这个框架提供了非常多的钩子。通过这些钩子我们可以对 pytest 用例收集、用例执行、报告输出等各个阶段进行干预,根据需求去开发对应的插件,以满足自己的使用场景。由于 pytest 提供的钩子函数非常的多,后续会分为多篇文章给大家分开介绍。这篇文章主要和大家介绍 pytest 的引导钩子和初始化钩子。

一、什么是钩子函数

钩子函数在 pytest 称之为 Hook 函数,它 pytest 框架的开发者,为了让用户更好的去扩展开发预留的一些函数。而预留的这些函数,在整个测试执行的生命周期中特定的阶段会自动去调用执行。如下图:

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386    

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337

图片

关于 pytest 中的预留钩子,可以通过开发插件,和在 conftest.py 去实现这些钩子。每个钩子函数可以在多个插件中实现,每个钩子和执行的函数比是:1:N。

pytest 中的钩子函数按功能一共分为 6 类:引导钩子,初始化钩子、用例收集钩子、用例执行钩子、报告钩子、调试钩子,本文主要给大家介绍引导钩子和初始化钩子。

二、引导钩子

引导钩子调用足够早,主要作用是用来解析命令和注册插件(内部插件和 setuptools 插件)。

1、pytest_load_initial_conftests

参数:
  • early_config:pytest 配置对象。

  • args:命令行上传递的参数。

  • parser:命令行添加的选项。

触发时机

  • 当在命令行通过 pytest 执行命令时,会先执行该钩子函数

默认作用:

  • 加载 conftest.py 文件

注意点:

  • 该钩子函数只有定义在插件中才会调用,在 conftest 定义则不会调用

2、pytest_cmdline_main

**触发时机:**执行运行主命令后执行

默认作用:
  • 调用命令解析钩子 pytest_cmdline_parse 和执行 runtest_mainloop

参数
  • config:pytest 配置对象

3、pytest_cmdline_parse

参数
  • args:命令行上传递的参数。

  • pluginmanager :插件管理器

默认作用:
  • 用来初始化配置对象,解析指定的参数

注意点:
  • 该钩子函数只有定义在插件中才会调用,在 conftest 定义则不会调用

三、初始化钩子

初始化钩子用来调用插件和 conftest.py 文件的初始化

1、pytest_addoption

参数
  • parser :参数解析器

  • pluginmanager :插件管理器

触发时机
  • conftest 文件加载完之后执行, 在测试运行开始时调用一次。

作用:
  • 添加运行命令的命令行参数,pytest.ini 的配置参数

Demo:
# 添加一个运行参数:--name
def pytest_addoption(parser,pluginmanager ):
  parser.addoption(
     "--name",
     action="store",
     dest="name",
     default="World",
     help='参数的帮助提示信息',
 )
   
# 添加一个ini文件的配置项
def pytest_addoption(parser,pluginmanager ):
  parser.addini(
     "name",
     help='参数的帮助提示信息',
     type="string",
     default="musen",
 )

 

2、pytest_configure

参数
  • config:pytest 配置对象

触发时机:
  • 在解析命令行选项后,每个插件和初始 conftest 文件都会调用此钩子,

  • 在导入其他 conftest 文件时调用该钩子。

默认作用:
  • 允许插件和 conftest 文件执行初始配置。

3、pytest_unconfigure

参数
  • config:pytest 配置对象

触发时机:
  • 在退出测试过程之前调用

4、pytest_sessionstart

参数
  • session:pytest 会话对象

触发时机:
  • 在创建 Session 对象之后、执行收集测试用例之前调用

5、pytest_sessionfinish

参数
  • session:pytest 会话对象

  • exitstatus:pytest 将返回系统的状态

触发时机:
  • 在整个测试运行完成后调用,就在将退出状态返回给系统之前

6、pytest_plugin_registered

参数
  • plugin :插件模块或实例

  • manager :pytest 插件管理器

作用:
  • 注册一个新的插件

7、pytest_addhooks

参数
  • pluginmanager :插件管理器

触发时机:
  • 注册插件时调用,添加钩子函数到执行列表

默认作用:
  • 调用 pluginmanager.add_hookspecs(module_or_class, prefix) 注册插件

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

学习才是测试猿的永动力!超详细的 pytest 钩子函数 之初始钩子和引导钩子来啦 的相关文章

随机推荐

  • AOI的实际应用

    使用AOI检测LED固晶焊线的支架产品 产品结构 使用远心光学镜头 高分辨率 高景深 低畸变以及独有的平行光设计等 被测元件清晰成像 且无斜视 保证不良检出 1 缺陷检测原理 通过模板匹配法 这是一种基本的识别方法 研究某一特定对象物的图案
  • Selenium启动Chrome时配置选项

    Selenium操作浏览器是不加载任何配置的 网上找了半天 关于Firefox加载配置的多点 Chrome资料很少 下面是关于加载Chrome配置的方法 一 加载所有Chrome配置 用Chrome地址栏输入chrome version 查
  • 数组转换成List集合

    对于给定的如下数组 如何转换成List集合 String array a b c 参考stackoverflow总结如下几种写法 1 使用原生方式 拆分数组 添加到List List
  • 傻瓜式操作 之 git分支(合代码--拉代码)

    刚刚入职的我 差点把人家分支给搞坏 呜呜呜太刺激了叭 之前学到 git 的相关知识的时候 都有一种恐惧心理 所以每次往 master 上面合代码的时候都让大佬帮我操作 前几天一位好心人给我了一套 git 的流程 现在玩分支简直是如鱼得水 哈
  • 一个无敌删除的命令,所有的流氓软件及顽固程序等都可以轻松的删除

    教你一个无敌删除的命令 所有的流氓软件及顽固程序等都可以轻松的删除 方法非常的简单 桌面右键 新建 文本文档 双击桌面的这个新建的文本文档 把下面的命令复制后粘贴进去 写入下列命令 DEL F A Q 1 RD S Q 1 文件 另存为 统
  • 一次安装Python插件mysqlclient受到的启发

    首先 我也是Python的初学者 环境是ubuntu22 04 pycharm 都安装好了以后 我打开了一个原来编辑过的项目 在新环境中提示没有安装mysqlclient 于是我就pip install mysqlclient 就有了以下的
  • 线性数据结构(线性表、链表、栈、队列、散列表)

    作者 disappearedgod 文章出处 http blog csdn net disappearedgod article details 23805707 时间 2014 4 16 线性表 基本概念 线性结构是最常用 最简单的一种数
  • 人脑神经网络计算法+机器

    人工神经网络编辑 人工神经网络 Artificial Neural Networks ANN 系统是 20 世纪 40 年代后出现的 它是由众多的神经元可调的连接权值连接而成 具有大规模并行处理 分布式信息存储 良好的自组织自学习能力等特点
  • 编码问题

    编码 字符 gt 字节数组 解码 字节数组 gt 字符 编码 String str 你好 byte bus str getBytes UTF 8 解码 String str1 new String bus UTF 8 System out
  • STM32F407 USART3串口使用DMA接收不定长数据和DMA中断发送

    一 前言 使用DMA通信的好处是 不占用单片机资源 不像普通串口中断 发送一个字节触发一次中断 发送100个字节触发100次中断 接收一个字节触发一次中断 接收200个字节触发200次中断 数据接收完毕触发一次DMA中断 发送数据完毕触发一
  • 如何克服开发团队缺乏专业知识,加速交付高质量项目成品

    持续测试是一个过程 使团队能够在软件开发中建立质量 并加速交付高质量的客户体验 通过持续测试 团队使用自动化测试获得关于代码健康的即时反馈 持续测试使企业能够评估商业风险 最近的行业调查显示 用于跟踪项目进展和成功的首要指标 高测试覆盖率
  • 设计一个能够获取栈中最小值的栈。

    设计一个栈 要求 支持 push pop top 操作 并能在常数时间内检索到栈中最小元素 示例 public Stack
  • 闭包-python

    闭包的概念 在 Python 中 闭包 closure 是一个常见的编程技巧 闭包是指一个函数对象 该函数能够访问其定义域外部的非全局变量 即使这些变量在函数调用时不处于活动状态也可以被访问 def outer func x def inn
  • ScriptManager和UpdatePanel控件的使用

    ScriptManager和UpdatePanel控件联合使用可以实现页面异步局部更新的效果 其中的UpdatePanel就是设置页面中异步局部更新区域 它必须依赖于ScriptManager存在 因为ScriptManger控件提供了客户
  • DNS 基础知识及 Linux DNS 服务器操作知识

    一 DNS域名结构与域名服务器 域名系统DNS Domain Name System 是因特网使用的命名系统 用来把便于人们使用的机器名字转换成为IP地址 域名系统其实就是名字系统 为什么不叫 名字 而叫 域名 呢 这是因为在这种因特网的命
  • 调用OpenAI接口失败的原因

    谈谈我研究OpenAI的感受 Chatgpt的后台时基于OpenAI研发的 但是国内一直无法使用Chatgpt 2023年2月份研究了OpenAI接口 为了国内能体验ChatGpt 就自己搭建了网站 并集成了几十个接口到自己的网站 也有很多
  • SpringBoot项目启动报错--“xxx程序包不存在“

    问题描述 SpringBoot项目 从主分支拉了一个新的分支 运行时报错xxx程序包不存在 原因分析 因为是从master新拉的分支 里面有以前已经编译好的target 可能是拉过来的分支有些地方没编译到 导致找不到程序包 解决方案 将项目
  • Ubuntu 18.04上安装CMake的简单经验流程

    这篇博客继续第一篇和第二篇的内容 这篇相对简单 按照这里的介绍 https cmake org install 我们直接把CMake的压缩包下载下来 解压后首先运行 bootstrap 如果是在一个比较新的系统上安装 则有可能会报下面的错
  • 【githubshare】无需编写一行代码,即可自动为静态数据集生成只读 API,快速完成静态数据的加载调用

    推荐 GitHub 上一款开源的开发者工具 ROAPI 无需编写一行代码 即可自动为静态数据集生成只读 API 快速完成静态数据的加载调用 GitHub github com roapi roapi 静态数据集所支持的格式 包括 CSV J
  • 学习才是测试猿的永动力!超详细的 pytest 钩子函数 之初始钩子和引导钩子来啦

    前 言 前几篇文章介绍了 pytest 点的基本使用 学完前面几篇的内容基本上就可以满足工作中编写用例和进行自动化测试的需求 从这篇文章开始会陆续给大家介绍 pytest 中的钩子函数 插件开发等等 仔细去看过 pytest 文档的小伙伴