前言
今天笔者想和小伙伴们聊聊pytest,用过pytest的小伙伴应该都知道,pytest之所以功能强大,是因为pytest的插件非常的多。这是插件大多是pytest的使用者所开发的,今天咱们专门来聊聊如何去自己开发Pytest的插件。
一、pytest插件的介绍
pytest框架采用的是插件系统的模式来设计的,pytest运行的所有流程都是基于插件实现的钩子来实现的。一个插件包含一个或多个钩子函数。编写钩子 解释了如何自己编写钩子函数的基础知识和细节。 pytest通过调用插件的指定钩子来实现配置、收集、运行和报告的各个方面:
内置插件:从 pytest 的内部_pytest目录加载。 外部插件:通过 setuptools 入口点发现的模块 conftest.py 插件:在测试目录中自动发现的模块
原则上,每个钩子调用都是一个1:NPython 函数调用,其中N是给定钩子的已注册实现函数的数量。所有钩子都遵循pytest_前缀命名约定,使其易于区分和查找。
二、pytest启动时插件发现顺序
pytest通过以下方式在工具启动时加载插件模块:
- 通过扫描命令行中的选项并阻止加载该插件(即使是内置插件也可以通过这种方式阻止)。这发生在正常的命令行解析之前。-p no:name
- 通过加载所有内置插件。
- 通过扫描命令行选项并加载指定的插件。这发生在正常的命令行解析之前。-p name
- 通过加载通过setuptools 入口点注册的所有插件。
- 通过加载通过PYTEST_PLUGINS环境变量。
- 通过加载conftest.py命令行调用推断的所有文件:
- 如果没有指定测试路径,则使用当前目录作为测试路径
- 如果存在,则加载conftest.py并test*/conftest.py相对于第一个测试路径的目录部分。加载文件后conftest.py ,加载其 pytest_plugins变量中指定的所有插件(如果存在)。
- 请注意,pytest 在工具启动时不会conftest.py在更深的嵌套子目录中找到文件。conftest.py将文