前言
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()。