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()。
相关推荐
xingyuzhisuan5 分钟前
从零精通GPU服务器模型部署:标准化流程与性能调优实战
运维·服务器·人工智能
霸道流氓气质8 分钟前
MyBatis 分页查询 + Feign 数据补充实战指南
数据库·oracle·mybatis
一起逃去看海吧9 分钟前
对接LangSmith
java·前端·数据库
wyhwust10 分钟前
web应用技术-第一次课后作业
java·前端·数据库
s_w.h13 分钟前
【 linux 】文件管理与重定向
linux·运维·服务器
Cloud_Shy61819 分钟前
Linux 系统定时任务 Cron(d) 服务应用实践(二:生产环境下的用户定时任务)
linux·运维·服务器·centos·云计算
hef28826 分钟前
SQL角色分组统计与功能扩展实战指南
数据库
隐退山林30 分钟前
JavaEE进阶:MyBatis操作数据库(进阶)
数据库·java-ee·mybatis
我是一颗柠檬40 分钟前
【MySQL全面教学】MySQL锁机制与并发控制Day10(2026年)
数据库·sql·mysql·database
爱喝水的鱼丶1 小时前
SAP-ABAP:变量、常量、结构与内表声明(10篇博客合集) 第六篇:ABAP 7.40+新特性:声明语法的简化写法与兼容注意事项
运维·服务器·开发语言·学习·算法·sap·abap