历史¶
pytest 有着悠久而有趣的历史。此存储库中的首次提交是在 2007 年 1 月,即使是那次提交本身也已经说明了很多:该存储库最初来自py库(后来拆分为 pytest),最初是 SVN 修订版,迁移到 Mercurial,最后迁移到 git。
但是,提交内容显示“创建新的开发主干”,并且已经相当庞大:435 个文件已更改,58640 个插入(+)。这是因为 pytest 最初诞生于PyPy的一部分,目的是为了更轻松地为其编写测试。以下是它如何从那里演变为自己的项目
2002 年底/2003 年初,PyPy 诞生。
正如该博客文章所述,从一开始,测试就备受关注。在 unittest.py 之上有各种
testsupport
文件,早在 2003 年 6 月,Holger Krekel (@hpk42) 重构了其测试框架,以清理内容(pypy.tool.test
,但仍然位于unittest.py
之上,还没有类似 pytest 的内容)。2003 年 12 月,Stefan Schwarzer 进行了一次另一次迭代,以改善他们的测试情况,称为
pypy.tool.newtest
。但是,它似乎并没有存在很长时间,因为在 2004 年 6 月/7 月左右,人们开始致力于一项名为
utest
的事物,提供简单的断言。这似乎是类似 pytest 的东西的开始,但不幸的是,目前尚不清楚当时测试运行器的代码是什么。仍然存在的与之最接近的是此文件,但这似乎根本不是一个完整的测试运行器。可以看到的是,Laura Creighton 和 Samuele Pedroni (@pedronis) 做出了各种努力,以自动将现有测试转换为新的utest
框架。大约在同一时间,对于 Europython 2004,@hpk42 启动了一个项目,最初称为“std”,旨在成为“补充标准库” - 已经制定了后来成为 pytest 的原则
当前“包含电池”非常有用,但
其中一些是用类似 java 的风格编写的,尤其是 unittest 框架
[…]
最好的 API 是不存在的 API
[…]
测试包应尽可能少地要求样板代码,并提供很大的灵活性
它应提供优质的回溯和调试帮助
[…]
首先……忘记有限的“assertXYZ API”,并使用真实的东西,例如
assert x == y
这适用于纯 Python,但你会得到无帮助的“断言失败”错误,而没有信息
std.utest(太神奇了!)实际上重新解释了断言表达式,并提供了有关基础值详细信息
2004 年 9 月,
py-dev
邮件列表诞生,现在是pytest-dev
,但值得庆幸的是,所有原始存档仍然完好无损。2004 年 9 月/10 月左右,
std
项目 更名为py
,std.utest
成为py.test
。这也是 整个源代码似乎可用的第一次,其中许多 API 仍然存在于今天py.path.local
,它在 16-17 年后逐渐淘汰了 pytest(有利于 pathlib)收集树的概念,包括
Collector
、FSCollector
、Directory
、PyCollector
、Module
、Class
参数,如
-x
/--exitfirst
、-l
/--showlocals
、--fulltrace
、--pdb
、-S
/--nocapture
(-s
/--capture=off
今天)、--collectonly
(--collect-only
今天)
在同一个月,
py
库 从PyPy
中分离出来一段时间以来,它似乎变得相当安静,在 2004 年 10 月(从 PyPy 中删除
py
)和 2007 年 1 月(现在 pytest 存储库中的首次提交)之间似乎发生了很少的事情。然而,邮件列表上对功能/想法进行了各种讨论,每隔几个月就会发布几次2006 年 3 月:py 0.8.0-alpha2
2007 年 5 月:py 0.9.0
2008 年 3 月:py 0.9.1(第一个版本可以在 pytest 变更日志 中找到!)
2008 年 8 月:py 0.9.2
2009 年 8 月,py 1.0.0 发布,引入了许多基本功能
funcargs/fixtures
插件架构,今天看起来仍然非常相似!
各种 默认插件,包括 monkeypatch
即使在那时,常见问题解答 也表示
显然,[第二个标准库] 野心勃勃,其命名可能给项目带来了困扰,而不是帮助它。项目名称可能会更改,并且可能会在某个时候拆分为不同的项目。
最终在 2010 年 11 月发生了这种情况,当时 pytest 2.0.0 作为与
py
分开的包发布(但仍称为py.test
)。2016 年 8 月,pytest 3.0.0 发布,其中添加了
pytest
(而不是py.test
)作为推荐的命令行入口点
由于这段历史,很难回答 pytest 何时启动的问题。这取决于应该真正视为一切开端的点。一种可能的解释是选择 Europython 2004,即 2004 年 6 月/7 月左右。