向后兼容性策略¶
Pytest 是一个积极发展的项目,已经酝酿了数十年。我们不断学习新的和更好的结构来表达关于测试的不同细节。
当我们实施这些修改时,我们 চেষ্টা确保平稳过渡,并且不想给我们的用户和社区/插件作者带来不必要的变动。
截至目前,pytest 考虑了多种类型的向后兼容性过渡
trivial: 可以轻松转换为新机制且不会引起问题的 API 更改。
我们 চেষ্টা无限期地支持这些 API,同时通过文档鼓励用户切换到更新或更好的机制。
transitional: 旧的和新的 API 不冲突,我们可以通过使用警告来帮助用户过渡,同时在较长时间内支持两者。
我们只会在主要版本中开始删除已弃用的功能(例如,如果我们在 3.0 中弃用某些功能,我们将在 4.0 中开始删除它),并至少保留两个次要版本(例如,如果我们在 3.9 中弃用某些功能并且 4.0 是下一个版本,我们将在 5.0 中开始删除它,而不是在 4.0 中)。
计划在主要版本 X 中删除的已弃用功能将使用警告类
PytestRemovedInXWarning
(PytestDeprecationWarning
的子类)。当弃用过期时(例如,发布 4.0),我们不会立即删除已弃用的功能,而是将使用标准警告过滤器将
PytestRemovedInXWarning
(例如,PytestRemovedIn4Warning
)默认转换为错误。这种方法明确表明删除迫在眉睫,并且仍然给你时间将已弃用的功能转换为警告而不是错误,以便你可以在自己的时间处理它。在下一个次要版本(例如,4.1)中,该功能将被有效删除。只有当正常过渡不合理地不可持续,并且会使重要的开发或功能延迟数年时,才应考虑真正的破坏性更改。此外,它们应仅限于实际用户数量非常少的 API(例如,仅影响某些插件),并且可以提前与社区协调。
此类即将到来的更改的示例
真正的破坏性更改必须首先在包含以下内容的问题中宣布:
更改的详细描述
理由
对用户和插件作者的预期影响(例如,在 #895 中)
在问题上没有明确的-1反对后,应跟进初始的概念验证拉取请求。
此 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 上的 deprecation 和 removal 标签跟踪未来功能的弃用和删除。
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+ |