歷史

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 月(將 py 從 PyPy 移出)到 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 何時開始的問題。這取決於哪個點應真正視為它的開始。一種可能的詮釋是選擇 2004 年的 Europython,即 2004 年 6 月/7 月左右。