歷史¶
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 月(將
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 發布,引入了許多基本功能
funcargs/fixtures
外掛程式架構,時至今日看起來仍然非常相似!
各種 預設外掛程式,包括 monkeypatch
甚至在那時,常見問題 就說
顯然,[第二個標準函式庫] 很雄心勃勃,而且這個名稱可能對專案造成困擾,而不是幫助專案。可能會更改專案名稱,並可能在某個時候拆分成不同的專案。
最後在 2010 年 11 月,pytest 2.0.0 發布,作為一個獨立於
py
(但仍稱為py.test
)的套件。2016 年 8 月,pytest 3.0.0 發布,新增
pytest
(而非py.test
)作為建議的命令列進入點。
由於這段歷史,很難回答 pytest 何時開始的問題。這取決於哪個點應真正視為它的開始。一種可能的詮釋是選擇 2004 年的 Europython,即 2004 年 6 月/7 月左右。