pytest插件开发笔记

栏目: Python · 发布时间: 6年前

内容简介: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 这一页写的很详细。有一些需要注意的地方,在这篇博客中我记一下:

插件载入的顺序:

  1. 内置的 _pytest 文件夹中的插件
  2. 外部安装的插件。 通过搜索setuptools提供的entry_points查找 pytest11 ,这个很有意思的,不知道为什么会是 pytest11 ,看起来像是开发者随手写的。如果我们自己写插件,就要在setup.py中提供一个pytest11的 entry_points
  3. 载入conftest.py

快速参考一些插件:

  1. 文档提供了一个非常简单的 Yaml文件测试的插件代码 ,源代码一看就能懂
  2. 默认插件的源代码
  3. 这里有一个搭建在Heroku上面的 pytest兼容性列表 ,列出了第三方写的插件。这个我猜是监控的pypi,因为我自己写的插件昨天上传到了pypi,今天就在这个列表看见了。不过它判断是否兼容应该是判断的 setup.py 中的classifiers。我啥也没写就被无情地判断成了不兼容Pyhton27也不兼容Python3。
  4. 一个工具 cookiecutter-pytest-plugin ,用来生成一个插件的模板。(我不是很推荐这种东西,刚开始用个最小的能跑起来的东西就可以了)

另外发现往pypi.python.org上传东西已经过时了,Api会返回Upload failed (410) Gone。现在正处于迁移的过程,新的包应该向 pypi.org 提交。而且应该用 twine 上传。

新的pypi酷炫多了,Python社区在迭代方面真是勇敢啊。都是好事儿。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python科学计算(第2版)

Python科学计算(第2版)

张若愚 / 清华大学出版社 / 2016-4-29 / 118

本书介绍如何用 Python 开发科学计算的应用程序,除了介绍数值计算之外,还着重介绍了如何制作交互式二维、三维图像,如何设计精巧的程序界面,如何与 C 语言编写的高速计算程序结合,如何编写声音、图像处理算法等内容。本书采用 IPython notebook 编写,所有的程序均能在本书提供的运行环境中正常运行,书中所印刷的图表以及程序输出为均为自动运行的结果,保证了书中所有程序的正确性以及可读性。......一起来看看 《Python科学计算(第2版)》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具