历史

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 项目 更名为 pystd.utest 成为 py.test。这也是 整个源代码似乎可用的第一次,其中许多 API 仍然存在于今天

    • py.path.local,它在 16-17 年后逐渐淘汰了 pytest(有利于 pathlib)

    • 收集树的概念,包括 CollectorFSCollectorDirectoryPyCollectorModuleClass

    • 参数,如 -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 发布,引入了许多基本功能

  • 即使在那时,常见问题解答 也表示

    显然,[第二个标准库] 野心勃勃,其命名可能给项目带来了困扰,而不是帮助它。项目名称可能会更改,并且可能会在某个时候拆分为不同的项目。

    最终在 2010 年 11 月发生了这种情况,当时 pytest 2.0.0 作为与 py 分开的包发布(但仍称为 py.test)。

  • 2016 年 8 月,pytest 3.0.0 发布,其中添加了 pytest(而不是 py.test)作为推荐的命令行入口点

由于这段历史,很难回答 pytest 何时启动的问题。这取决于应该真正视为一切开端的点。一种可能的解释是选择 Europython 2004,即 2004 年 6 月/7 月左右。