内容简介: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 插件:多线程文件下载插件开发
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Android 源码设计模式解析与实战
何红辉、关爱民 / 人民邮电出版社 / 2015-11 / 79.00元
本书专门介绍Android源代码的设计模式,共26章,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。主要内容为:优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、单例模式、Builder模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器模式、命令模式、观察者模式、备忘录模式、迭代器模式、模板方法模式、访问者模式、中介......一起来看看 《Android 源码设计模式解析与实战》 这本书的介绍吧!