目录
1. 获取pytest源码
pytest 的源码托管在 github 上的,
我这里以 7.2.x 版本为目标进行分析,所以需要获取7.2.x 分支的源码
在PyCharm中执行以下三个命令:
-
克隆源码仓库 git clone git@github.com:pytest-dev/pytest.git
-
切换到7.2.x分支 git checkout 7.2.x
-
安装下载好pytest pip install -e .
pytest的本地开发就搭建好了
注:如果你不熟悉git,也可以通过下面的链接直接下载 https://github.com/pytest-dev/pytest/archive/refs/heads/7.2.x.zip
2. 分析外部依赖
pytest 功能能强大,内容丰富,直接阅读 pytest 源码可能有些无从下手,
这一次我选择先从外围进行突破。
考虑到 pytest 不是凭空产生, 在它工作中难免借助一些基础组件,
如果搞清楚 pytest 依赖和使用哪些外部依赖组件,能够快速的加深对 pytest 的理解。
以 python 项目的开发惯例,外部依赖的模块可能定义在以下几个文件中:
pyproject.toml
setup.py
setup.cfg
首先对这三个文件分别对其查验,
果然在 setup.cfg 中列出了 pytest 外部依赖
install_requires =
attrs>=19.2.0
iniconfig
packaging
pluggy>=0.12,<2.0
colorama;sys_platform=="win32"
exceptiongroup>=1.0.0rc8;python_version<"3.11"
importlib-metadata>=0.12;python_version<"3.8"
tomli>=1.0.0;python_version<"3.11"
其中:
-
exceptiongroup、importlib-metadata、tomli在 python 3.11以上的版本不需要;
-
colorama在Linux和macOS系统中不需要,
我的本地环境是 Python 3.11,所以真正的核心外部依赖分别是:
-
attrs
-
用途 :修饰class,更便捷地创建类和属性
-
iniconfig
-
用途:读取ini配置文件
-
packaging
-
官网:Packaging
-
用途:解析包的版本号和依赖关系
-
pluggy
-
用途:实现和使用pytest的各种插件,是pytest核心系统
此外,pytest还大量地使用了python标准库,你对python和python的这些库的了解越深,就越容易理解pytest源码中的各种内容
本文系《pytest源码剖析》系列内容,首发于公众号:测试开发研习社
正在连载,欢迎关注