歷史¶
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/fixture
插件架構,今天看起來仍然非常相似!
各種預設插件,包括 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 月。