【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 pytest
import csv
import 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
: 添加命令行参数pytest_collection_modifyitems
: 重写搜集用例的这个钩子函数
主要就是把搜集到的case的标题,描述和markers
这3样写到 csv 文件中。
2. 测试插件代码
插件主体代码写好了,我们需要自测一下。
按之前的话,可以直接把插件代码写到本地conftest
文件里作为本地代码直接调用测试即可。
不过 Pytest 附带一个名为pytester
的插件,它可以帮助我们为插件代码编写测试。这个插件在默认情况下是禁用的,所以在使用之前要先开启。
在 test 目录下的 conftest
文件中声明即可。
接下来上插件测试代码,然后讲解一下相关用法:
import pytestdef test_pingguo(pytester):"""Make sure that our plugin works."""pytester.makeini("""[pytest]markers =nightlyperformanceintegrationhighmediumlow""")pytester.makepyfile("""import pytest@pytest.mark.performancedef test_one():\"""test_one\"""assert False@pytest.mark.highdef test_two():\"""test_two\"""assert Truedef test_three():\"""test_three\"""assert Trueclass TestPingGuo():@pytest.mark.high@pytest.mark.performancedef test_a(self):\"""TestPingGuo.test_a,测试\"""assert Falsedef test_b(self):\"""TestPingGuo.test_b测试\"""assert True""")# run all tests with pytestresult = pytester.runpytest("--testplan=testplan.csv")
这里最重要的就是pytester
提供的方法,比如上面用到的:
pytester.makeini
:因为我的测试case上加了不同的 marker,这些是需要注册在 ini 文件里的pytester.makepyfile
: 这里就是写的测试用例代码了
其实就是在对应的方法里,写上我们的原生代码,只是需要被""" """
包起来,当做字符串,然后 pytest 会自行解析我们的代码,在临时目录里创建对应的文件然后运行。
不仅如此,还可以创建其他的文件,比如conftest
。这是源码,有兴趣的可以进去一探究竟。
pytester.runpytest("--testplan=testplan.csv")
这里可以添加要执行的命令行参数。
运行测试
直接运行测试代码,看下结果。
注意我这里的文件也是被生成在了临时目录里,打开控制台输出的路径就可以找到。
打开 csv 文件验证一下结果,输出正确。
3. 打包
回到项目根目录,命令行输入:
python setup.py sdist build
完成后会生成dist
目录,下面就有对应的包。
4. 上传 pypi
没有账号的要先注册登录一下,记得要去对应填写的邮箱里点击激活认证才可以。
接着安装twine
,我能使用这个工具来上传。
pip install twine
安装完成后就可以执行了上传:
twine upload dist/*
提示需要输入注册的账号和密码,最后完成上传。
上传完成后就可以在pypi中打开自己的插件主页了,现在其他小伙伴也可以安装插件了。
【pytest官方文档】解读- 开发可pip安装的第三方插件相关推荐
- linux3.10.53编译,根据官方文档在Linux下编译安装Apache
根据官方文档在Linux下编译安装Apache 前言 永远记住官方文档才是最准确的安装手册,这篇文章仅为对官方文档的解读和补充,学习提升务必阅读官方文档: http://httpd.apache.or ...
- pytest官方文档 6.2 中文翻译版(第十章):警告捕捉
从3.1版本开始,pytest会在整个测试执行的过程中自动的捕捉警告: # content of test_show_warnings.py import warningsdef api_v1():w ...
- gateway的官方文档解读
之前公司用了springcloud的gateway.被一个伙伴留下了一堆的坑,没办法只能从头梳理. 第一步就是确定架构, gateway+consul+springboot 第二步就是确定一个flag ...
- torch.unsqueeze官方文档解读
文章目录 前言 1. 功能介绍 2. 参数说明 3. 代码举例 前言 本文是对torch.unsqueeze官方文档的解读,加入部分代码示例,方便理解. 1. 功能介绍 torch.unsqueeze ...
- 蓝牙MESH 官方文档解读 翻译(1)
已从事两年的物联网无线通信相关应用开发,但在接触蓝牙MESH相关技术时,一般都需要查询官方机构的文档,规范等,但发现网络上相应的中文资料较少,故对相关官方文档结合自身开发经验进行了翻译. 此部分摘自官 ...
- Mybatis官方文档解读
跟着Mybatis的官方文档总结一下.~ 简介 什么是mybatis? mybatis是一款优秀的持久层框架,它支持自定义SQL,存储过程以及高级映射.Mybatis免除了所有的JDBC代码以及 设置 ...
- splash官方文档解读(翻译)
安装 splash是一个类似于selenium的自动化浏览器,不过它与selenium还是有很大区别的:比如splash是异步的,splash暴露httpAPI来自动化操作. 安装很简单,需要先安装d ...
- 【官方文档】Fluent Bit 数据管道之过滤插件(Kubernetes)
文章目录 1. 配置参数 2. 处理 'log' 值 3. Kubernetes Annotations 3.1. Pod 定义中的 annotations 示例 3.1.1. 建议一个解析器 3.1 ...
- 【官方文档】Fluent Bit 数据管道之输入插件(Tail)
文章目录 1. 配置参数 2. 多行支持 2.1. 多行核心 (v1.8) 2.2. 多行和容器 (v1.8) 2.3. 旧的多行配置参数 2.4. 旧的 Docker 模式配置参数 3. 入门指南 ...
最新文章
- iOS开发火了九年,这些错误你还在犯嘛?
- CRM中间件里parent not ok的错误消息如何处理
- [HDU517] 小奇的集合
- DBDesigner 4 与 MySql 5 不能连接主要是驱动的原因
- mysql数据库更新语句效率_MySQL数据库优化
- java maxheap_Java底层PriorityQueue 优先队列——基于MaxHeap最大堆
- 阿里正在使用一种更灵活的软件集成发布模式
- fiddler之数据统计(statistics)
- 优化网站性能 提高网站速度访问速度的14条实践(转)
- 解决办法:Could not determine java version from ‘11.0.8‘.
- 7.2.5 dps 测试软件,魔兽世界7.2.5兽王猎DPS有什么改动测试
- PE系统-微PE工具箱V2.1 - 有情怀的PE - PE中的战斗鸡无广告VIP精品
- 钉钉日志范文100篇_关于公司各岗位钉钉日志撰写标准
- 2021-11-1-无法在此设备上激活WINDOWS因为无法连接到你的组织的激活服务器
- 面试官系列:前端高频面试题汇总 | Vue面试题
- 网页表格线框html,网页设计表格单元格线条及边框设置
- 用python爬取百科糗事的小项目
- 2001年图灵奖--奥尔-约翰·戴尔和克里斯登·奈加特简介
- AE影视后期特效制作深入剖析AE表达…
- winform pdf转图片.jpg或.png(O2S.Components.PDFRender4NET)
热门文章
- Give Candies
- 城市建筑Shp转stl模型文件说明
- 泊松圆盘采样(Poisson Disk Sampling)代码实现
- 用友安装ins信息服务器,Win下安装用友U步骤及设置.docx
- 关于fi dd ler 手机抓包 网卡地址地址_大年别闲着,跟我来学tcpdump抓包
- 程序员2014精华本
- 关于Python tkinter中出现的坑(界面Tk()+图片显示)
- 本人男,27岁技术经理,收入太高,心头慌得一比
- 《游戏机制——高级游戏设计技术》一2.6 将突现和渐进相结合
- 第七章第二节:Java类和对象之封装、包和static成员