【pytest官方文档】解读-开发可pip安装的第三方插件
在上一篇的 hooks 函数分享中 , 开发了一个本地插件示例 , 其实已经算是在编写插件了 。今天继续跟着官方文档学习更多知识点 。
一个插件包含一个或多个钩子函数 , pytest 正是通过调用各种钩子组成的插件 , 实现了配置、搜集、运行和报告的所有方面的功能 。
通常 pytes t中的插件有如下 3 类:
内置插件
: 从 pytest 内部的_pytest
目录加载外部插件
: 通过setuptools
入口发现的模块conftest.py
: 在测试目录中自动发现的模块
/Lib/site-packages/_pytest
这里 , 有兴趣的可以看下 。第三个
conftest.py
我们也很熟悉了 , 像之前写fixture
函数以及本地hooks函数插件 , 都是在conftest.py
中 。第二个外部插件中提到的
setuptools
是什么呢?其实这是 pytest 的一个特性库 , 通过这个
setuptools
, 我们的插件代码可以通过pip安装并上传到PyPI 。本章就来开发一个可以 pip 安装的第三方插件
一、cookiecutter-pytest-plugin但是在开发之前 , 先来了解下
cookiecutter-pytest-plugin
这个项目 。这是官方文档中强烈推荐的 , 可以帮助我们快速生成一个规范标准的插件项目 。项目地址:https://github.com/pytest-dev/cookiecutter-pytest-plugin
跟着项目介绍的文档一步步来就行 。
先安装该项目:
$ pip install cookiecutter
然后可以使用这个工具开始创建我们自己的插件项目了 。$ cookiecutter https://github.com/pytest-dev/cookiecutter-pytest-plugin
一步步跟着出现的指令提示 , 输入对应的项目信息即可 。
文章插图
最后的输入的一个测试插件项目是这样的 。

文章插图
二、开发第三方插件重新写一个插件 , 可以通过命令行 , 来输出搜集到的测试用例的相关信息并保存到
csv
文件中去 。可以直接在上面生成好的插件项目模板里写我们自己的代码 。

文章插图
红色文件
, 就是我们插件代码的主体部分绿色部分
, 是我们自测插件代码的地方
setup.py
, 因为插件模板项目自动生成了 , 里面就是插件项目的相关信息 , 以及依赖 。
文章插图
1. 插件主体代码
import pytestimport csvimport repytest_plugins = 'pytester'def pytest_addoption(parser):group = parser.getgroup("testplan")group.addoption("--testplan",action="store",default=None,help="生成包含测试元数据的CSV并退出 , 而不运行测试")def pytest_collection_modifyitems(session, config, items):path = config.getoption('testplan')if path:with open(path, mode='w') as fd:writer = csv.writer(fd, delimiter=',', quotechar='"',quoting=csv.QUOTE_MINIMAL)writer.writerow(["title", "description", "markers"])for item in items:title = item.nodeiddescription = re.sub('\n\s+', '\n', item.obj.__doc__.strip())markers = ','.join([m.name for m in item.iter_markers()])writer.writerow([title, description, markers])pytest.exit(f"测试计划已生成: {path}")
pytest_addoption
: 添加命令行参数经验总结扩展阅读
- 葡萄酒有白色漂浮物怎么处理
- 茶麸洗头几天洗一次为宜
- 巴沙鱼禁止的原因
- 上太空的三个航天员的名字
- 羊蝎子火锅里面有什么
- 骨灰的主要成分
- 熬猪油大火还是小火
- 白茶属于绿茶吗?
- 地震等级威力大小差别
- 喝什么茶对身体好