一、什么是 hooks 函数
简单来说,在 pytest 的代码中,预留出了一些函数供我们修改,以便来改变pytest工作方式,这些函数就是hooks函数,我们可以直接重写函数里的内容。
比如,在 pytest代码路径\Lib\site-packages\_pytest\hookspec.py中,可以看到 pytest 定义好的 hook 规范,方便我们在开发插件的时候参考规范来调用对应的hooks函数。
二、hooks 函数的分类
从hooks函数的职责分类来看,大概如下几类:
Bootstrapping hooks:引导类钩子,用来调用已经早就注册好的内部插件和第三方插件。
Collection hooks:集合类钩子,pytest 调用集合钩子来收集文件和目录。
Test running (runtest) hooks:测试运行相关的钩子,所有与测试运行相关的钩子都接收一个pytest.Item对象。
Reporting hooks:与Session 会话相关的钩子。
Debugging/Interaction hooks:调试/交互钩子,少有的可以用于特殊的报告或与异常交互的钩子函数。
可供调用的钩子函数有很多,功能也是各式各样的,有兴趣的童鞋可以进一步细看官方文档里的介绍。我们就是要通过不同钩子函数具备的功能,来实现我们自定义的需求。
三、编写 hooks 函数开发本地插件
写一个插件示例。
比如我们平时执行case的时候,一通跑完可能会出现不少失败的case,那通常我可能就会翻控制台的输出来找出哪些case失败了。
但是控制台里输出的信息有很多,于是乎我想直接把测试失败的case信息存到一个本地文件里,我直接打开就可以看到所有失败的case。