内容简介:pytest插件开发笔记
上一篇博客解决了写爬虫测试时候的一个痛点:复制粘贴太多的重复代码。可还有一个比较烦人的地方,即使test的代码可以自动生成,但还是需要人工去找到底什么地方出现了外部请求,如果 检查外部请求->下载对应的资源并生成mock的代码这部分能够自动完成就好了。今天下手搞了下。
我们的CI是通过pytest的conftest强制必须mock掉HTTP请求的。所以我想这个也可以通过pytest的插件机制来解决。于是就写了一个pytest插件来搞。
Github地址: https://github.com/laixintao/pytest-mock-helper
Pypi: https://pypi.org/project/pytest-mock-helper/
写这个插件花了大约两个小时,原理非常简单。在pytest启动的时候将 requests
库的 requests.adapters.Adapter.send
方法替换掉,加入我们要做的逻辑。这么做的灵感来自于另外一个pytest插件: pytest-blockage
。这个插件的作用是让pytest强制block掉HTTP请求。和我们在conftest中做的事情一样,但是插件更合理一些,因为我们在不同的项目中就要复制conftest中的代码。不过要注意的是这个插件很久不更新了,不支持 Python 3。所以如果有类似的需求(在CI中强制Mock HTTP请求)建议使用我的插件。
能如此快速写出一个插件要得益于pytest超赞的文档啊。 writing_plugins 这一页写的很详细。有一些需要注意的地方,在这篇博客中我记一下:
插件载入的顺序:
-
内置的
_pytest
文件夹中的插件 -
外部安装的插件。
通过搜索setuptools提供的entry_points查找
pytest11
,这个很有意思的,不知道为什么会是pytest11
,看起来像是开发者随手写的。如果我们自己写插件,就要在setup.py中提供一个pytest11的entry_points
- 载入conftest.py
快速参考一些插件:
- 文档提供了一个非常简单的 Yaml文件测试的插件代码 ,源代码一看就能懂
- 默认插件的源代码
-
这里有一个搭建在Heroku上面的 pytest兼容性列表
,列出了第三方写的插件。这个我猜是监控的pypi,因为我自己写的插件昨天上传到了pypi,今天就在这个列表看见了。不过它判断是否兼容应该是判断的
setup.py
中的classifiers。我啥也没写就被无情地判断成了不兼容Pyhton27也不兼容Python3。 - 一个工具 cookiecutter-pytest-plugin ,用来生成一个插件的模板。(我不是很推荐这种东西,刚开始用个最小的能跑起来的东西就可以了)
另外发现往pypi.python.org上传东西已经过时了,Api会返回Upload failed (410) Gone。现在正处于迁移的过程,新的包应该向 pypi.org 提交。而且应该用 twine 上传。
新的pypi酷炫多了,Python社区在迭代方面真是勇敢啊。都是好事儿。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- AndroidStudio笔记(2)插件介绍
- 插件化开发笔记(一)代理模式
- ansible笔记(34):lookup插件
- Vue 2.0学习笔记:如何创建Vue插件
- webpack笔记——在html-webpack-plugin插件中提供给其它插件是使用的hooks
- IDEA 插件:多线程文件下载插件开发
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
谁说商业直觉是天生的
[美] 戴夫·帕特奈克 (Dev Patnaik)、[美] 彼得·莫特森 (Peter Mortensen) / 马慧 / 万卷出版公司 / 2010-07 / 36.00
《Wired to Care》是帕特奈克集近年来在创新顾问公司 Jump Associates 实务经验,与史丹佛大学教学经验之大成,虽然《Wired to Care》定位为一本用设计创新方法谈企业管理的书,但本书,活像是一本近代的设计史,从以销售为设计目标的Raymond Loewy谈起,到以人为设计中心的OXO GOOD GRIPSSwivelPeeler削皮刀。由此作者向我们揭示了企业如何运......一起来看看 《谁说商业直觉是天生的》 这本书的介绍吧!