歷史

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)

    • 收集樹的概念,包括 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 月。