pytest钩子函数(一):引导钩子和调试钩子

前言

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

01 什么是钩子函数?

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nv6iC7uZ-1689820387589)(/api/attachments/426316)

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

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

02 引导钩子

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

2.1 pytest_load_initial_conftests

参数:

  • early_config:pytest 配置对象。
  • args:命令行上传递的参数。
  • parser:命令行添加的选项。

触发时机:

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

默认作用:

  • 加载conftest.py文件。

注意点:

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

2.2 pytest_cmdline_main

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

默认作用:

  • 调用命令解析钩子pytest_cmdline_parse和执行runtest_mainloop。

参数

  • config:pytest 配置对象

2.3 pytest_cmdline_parse

参数

  • args:命令行上传递的参数。
  • pluginmanager :插件管理器。

默认作用:

  • 用来初始化配置对象,解析指定的参数。

注意点:

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

03 调试钩子

很少有可以用于特殊报告或与异常交互的挂钩:

  • pytest_internalerror(excrepr: ExceptionRepr, excinfo: ExceptionInfo[BaseException]) 要求内部错误。返回True以禁止对将INTERNALERROR消息直接打印到sys.stderr的回退处理。
  • pytest_keyboard_interrupt(excinfo: ExceptionInfo[Union[KeyboardInterrupt, Exit]]) 要求键盘中断。
  • pytest_exception_interact(node: Union[Item, Collector], call: CallInfo[Any], report: Union[CollectReport, TestReport]) 在引发可能可以交互处理的异常时调用。
  • pytest_enter_pdb(config: Config, pdb: pdb.Pdb) 调用了pdb.set_trace()。
相关推荐
woshilys2 小时前
mysql 删除表等待
数据库·mysql
SEO-狼术2 小时前
dbForge Documenter for Oracle Crack
数据库·oracle
搜搜秀2 小时前
find指令中使用正则表达式
linux·运维·服务器·正则表达式·bash
极限实验室3 小时前
如何使用 Grafana 连接 Easyearch
数据库
文or野3 小时前
MySQL 在 CentOS 7 环境安装完整步骤
数据库·mysql·adb
牧羊狼的狼3 小时前
主键索引和唯一索引的区别
数据库·sql·oracle
Justice link4 小时前
部署redis cluster
数据库·redis·缓存
会飞的土拨鼠呀4 小时前
SQL Server AlwaysOn (SQL 查询数据详解及监控用途)
数据库
Archie_IT4 小时前
修图自由!自建IOPaint服务器,手机平板随时随地远程调用在线P图
运维·服务器·前端·git·深度学习·npm·conda
无名之逆4 小时前
[特殊字符] Hyperlane:为现代Web服务打造的高性能Rust文件上传解决方案
服务器·开发语言·前端·网络·后端·http·rust