Pytest 源码解读 [0] - Kickoff 篇
Pytest 源码解读
之前定的目标,2019 年要完成 pytest
的源码解读,实在是因为之前太忙耽搁下来,眼看已经到了8月份,再不开始的话估计就要黄了 (之前信誓旦旦立的Flag不能轻易打破)。其实时间挤挤也总是有的,不能再找借口了。而且估计未来也不会再去看 pytest 的source code 了,就当给自己的 Pytest 这段经历做个总结吧。
Python 在测试框架的选择上主要是3个
- unittest
- nose
- pytest
unittest
是 python 自带的一个轮子,一般常用的需求都能满
nose
(https://nose.readthedocs.io/en/latest/) 是一个第三方的测试框架,之前在emc
和 greenplum
团队一起搞了一个项目是基于 nose 的,感觉功能要比 unittest 要复杂一些,不够我没有用的太深入,也没资格点评
pytest
是我加入到 Splunk 的时候开始接触的,Splunk 当时内部有一个叫 Helmut
的框架,就是基于 pytest
来打造的 。这也是我第一次知道Pytest,刚开始最不习惯的使用 Fixture
, 后来才慢慢品味到了 Fixture
这种 Lazy Loading 的设计价值。后来基本上我就一直在用 Pytest 了,而且在依图的时候团队写了一个 Fixture Factory
的 module ,进一步简化了 Fixture 的使用和管理复杂度。当然这次主要是聚焦在 Pytest 的源码分析上,至于 Pytest 的使用,大家自己看 Pytest 的官方文档吧。
一些周边信息
Holger Krekel
- Pytest 的作者,其实 Pytest 最开始的名字叫
Py.test
- 他是个德国人,同时还是
PyPy
和tox
的作者
Pluggy
- (https://github.com/pytest-dev/pluggy)
- Pytest 的核心实际的基于
Pluggy
这个 plugin framework 的,实际上 pytest 本身就是由一个一个插件组成的 - 本来 pluggy 的代码是在 pytest 的 repo 里,后来迁移了出来,作为一个独立的项目。Pluggy 作为一个独立的plugin framework 来看也是很优雅的存在
源码分析计划
主要是分两步走
- Pluggy 的分析,这个是 Pytest 的核心引擎
- Pytest 分析