向後相容性政策

Pytest 是一個積極發展的專案,已經醞釀了數十年。我們不斷學習新的、更好的結構來表達關於測試的不同細節。

當我們實施這些修改時,我們盡力確保平穩過渡,並且不想對我們的使用者和社群/插件作者施加不必要的變動。

目前,pytest 考慮多種類型的向後相容性過渡

  1. trivial: 可以輕鬆轉換為新機制且不會引起問題性變更的 API。

    我們嘗試無限期地支援這些 API,同時鼓勵使用者透過文件切換到更新或更好的機制。

  2. transitional: 新舊 API 不衝突,我們可以透過使用警告來幫助使用者過渡,同時長期支援兩者。

    我們只會在主要版本中開始移除已棄用的功能(例如,如果我們在 3.0 中棄用某些功能,我們將在 4.0 中開始移除它),並至少保留兩個次要版本(例如,如果我們在 3.9 中棄用某些功能,而 4.0 是下一個版本,我們將在 5.0 中開始移除它,而不是在 4.0 中)。

    計劃在主要版本 X 中移除的已棄用功能將使用警告類別 PytestRemovedInXWarningPytestDeprecationWarning 的子類別)。

    當棄用過期時(例如,發布 4.0),我們不會立即移除已棄用的功能,而是會使用標準警告篩選器將 PytestRemovedInXWarning(例如,PytestRemovedIn4Warning)預設轉換為錯誤。這種方法明確表示即將移除,並且仍然讓您有時間將已棄用的功能轉換為警告而不是錯誤,以便您可以在自己的時間內處理它。在下一個次要版本(例如,4.1)中,該功能將被有效移除。

  3. 只有當正常的過渡不合理地難以維持,並且會將重要的開發或功能推遲數年時,才應考慮真正的破壞。此外,它們應僅限於實際使用者數量非常少的 API(例如,僅影響某些插件),並且可以提前與社群協調。

    此類即將發生的變更範例

    • 移除 pytest_runtest_protocol/nextitem - #895

    • 重新排列節點樹以包含 FunctionDefinition

    • 重新排列 SetupState #895

    真正的破壞必須首先在包含以下內容的問題中宣布

    • 變更的詳細描述

    • 理由

    • 對使用者和插件作者的預期影響(範例請參閱 #895

    在問題上沒有強烈的-1之後,應跟進初始的概念驗證 Pull Request。

    此 POC 既可作為評估影響的協調點,也可作為靈感來源,以便在之後提出過渡性解決方案。

    經過一段合理的時間後,PR 可以合併以作為新主要版本的基礎。

    為了使 PR 從 POC 成熟到被接受,它必須包含:* 設定棄用錯誤/警告,以幫助使用者修復和移植他們的程式碼。如果有可能在當前系列下的棄用期內,在真正的破壞之前引入棄用期,則應在單獨的 PR 中引入,並成為當前發布流的一部分。* 在 doc/en/deprecations.rst 中詳細描述理由和關於如何移植程式碼的範例。

歷史

主要關注平穩過渡 - 立場(6.0 之前)

保持向後相容性在 pytest 專案中具有非常高的優先順序。儘管多年來我們已經棄用了一些功能,但大多數功能仍然受到支援。pytest 中的所有棄用都是因為出現了更簡單或更有效的方法來完成相同的任務,使得舊的做事方式變得不必要。

在 pytest 3.0 版本中,我們引入了一個清晰的溝通方案,說明我們何時會真正移除舊的、損壞的部分,並禮貌地要求您改用新的熱門功能,同時給您足夠的時間來調整您的測試或在有正當理由保留已棄用功能的情況下提出疑慮。

為了傳達變更,我們使用自訂警告層次結構發出棄用警告(請參閱 內部 pytest 警告)。可以使用標準方法抑制這些警告:-W 命令列標誌或 filterwarnings ini 選項(請參閱 如何捕獲警告),但我們建議謹慎且暫時地使用這些方法,並在可能的情況下注意警告。

我們只會在主要版本中開始移除已棄用的功能(例如,如果我們在 3.0 中棄用某些功能,我們將在 4.0 中開始移除它),並至少保留兩個次要版本(例如,如果我們在 3.9 中棄用某些功能,而 4.0 是下一個版本,我們將在 5.0 中開始移除它,而不是在 4.0 中)。

當棄用過期時(例如,發布 4.0),我們不會立即移除已棄用的功能,而是會使用標準警告篩選器將它們預設轉換為錯誤。這種方法明確表示即將移除,並且仍然讓您有時間將已棄用的功能轉換為警告而不是錯誤,以便您可以在自己的時間內處理它。在下一個次要版本(例如,4.1)中,該功能將被有效移除。

棄用路線圖

目前已棄用和在先前版本中移除的功能可以在 棄用和移除 中找到。

我們使用里程碑和 GitHub 上的 deprecationremoval 標籤來追蹤未來功能的棄用和移除。

Python 版本支援

發布的 pytest 版本支援發布時正在積極維護的所有 Python 版本

pytest 版本

最低 Python 版本

8.0+

3.8+

7.1+

3.7+

6.2 - 7.0

3.6+

5.0 - 6.1

3.5+

3.3 - 4.6

2.7, 3.4+

Python 版本狀態.