We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
cover of episode pytest-repeat - works fine on Python 3.14

pytest-repeat - works fine on Python 3.14

2025/4/10
logo of podcast Test & Code

Test & Code

AI Deep Dive AI Chapters Transcript
People
主持人
专注于电动车和能源领域的播客主持人和内容创作者。
Topics
主持人:pytest-repeat 插件在 Python 3.14 版本上运行良好,并且已经在 Python 3.9 到 3.14 版本上进行了测试。该插件允许重复运行测试,可以通过命令行参数 `--count` 和 `--repeat-scope` 来控制重复次数和范围,也可以使用装饰器 `@pytest.mark.repeat` 来指定单个测试的重复次数。对于查找间歇性测试失败,建议设置较大的重复次数,并结合 `--xfail` 参数使用,以便在测试失败时能够及时发现并调试。 此外,我解释了之前发布的关于 pytest-repeat 在 Python 3.14 上不工作的愚人节玩笑。这个玩笑利用了 Python 3.14 版本号与圆周率 π 的开头数字相同的巧合,以及 π 是无理数且不会重复的特点,与 pytest-repeat 的重复功能形成对比。虽然这个玩笑并不十分成功,但我希望能够在以后的愚人节尝试更好的玩笑。 最后,我介绍了 pytest-repeat 插件的最新版本更新,该版本主要更新了测试范围,现在涵盖 Python 3.13 和 3.14 版本。

Deep Dive

Chapters
This chapter covers the pytest-repeat plugin, its functionality for repeating tests, different usage methods with command-line options and decorators, and strategies for identifying intermittent test failures. It emphasizes the plugin's compatibility with various Python versions, including 3.14.
  • pytest-repeat works on Python 3.14 and versions 3.9-3.14.
  • It allows repeating tests using command-line options (--count) or decorators (@pytest.mark.repeat).
  • Repeating tests helps identify intermittent failures by running tests multiple times. Using --count with repeat scope=session and -x can pinpoint failures.

Shownotes Transcript

今天我想再次谈谈 PyTest Repeat。我们将涵盖几件事情。首先,PyTest Repeat 在 Python 3.14 上运行良好。其次,我将再次简要解释 PyTest Repeat。第三,我需要解释上一集,即 4 月 1 日的那一集。

欢迎收听 Test and Code。在我们开始之前,我想提到我已经对 courses.pythontest.com 上的 PyTest 培训课程进行了更改。如果您想了解更多信息,请收听节目结尾的结语。无论您是今天需要开始使用 PyTest,还是想提升您的 PyTest 技能,我都有适合您的课程。

那么,PyTest Repeat。为什么我又要介绍 PyTest Repeat 呢?好吧,部分原因是我可以重复我自己,因为这有点像个笑话。但同时,上一集也有一些人存在误解。

我只能告诉你,PyTest repeat 现在正在 Python 3.9 到 3.14 版本上进行测试。为什么是这些版本?好吧,只是为了向你证明它在 Python 3.14 上运行良好,而且因为这些是 Python 的受支持版本或即将推出的版本。Python 3.8 及更早版本已停止维护,对于 PyTest 来说,这是一种相当标准的做法。

Python 包维护者只测试那些未停止维护的 Python 版本。所以现在是 3.9 及以上版本。我们将再次讨论 PyTestRepeat 是什么。我上周谈到了它,但我还没决定是否要删除那一集。我现在先保留它。我可能会删除它的原因是,这是一个失败的愚人节节目,我们将在最后讨论它。所以首先,我将重复 PyTestRepeat 的作用

这没关系,因为它是一个很棒的插件。PyTest Repeat 允许您重复测试。您可以通过几种方式来驱动它。您可以使用 `--count` 加上一个数字。例如,说 10。然后默认情况下,您将运行第一个测试 10 次,然后运行第二个测试 10 次。实际上,所有收集到的测试都将运行 10 次,然后在继续下一个测试之前重复。

如果您希望它运行整个套件,然后重复并执行整个套件 10 次,则可以将 `repeat scope` 标志设置为 `session`。还有其他选项,但我通常要么保留默认值,要么将其设置为 `session`。其他选项是,所有选项都是 `session`、`module`、`class` 和 `function`。默认情况下是 `function`,这意味着它会重复每个函数,然后继续下一个函数。但是如果您将其设置为 `session`,它将遍历会话。如果您将其设置为 `module`,它将测试每个测试模块(例如测试文件)10 次,然后继续下一个文件。对我来说,在 repeat 中使用 `module` 和 `class` 从来没有意义,所以我通常只使用 `function` 或 `session`。无论如何。

如果您只想关注特定的一组测试,例如您有一两个或三个,或者甚至只有一个测试,您真的希望它运行几次,您可以使用装饰器而不是传入它。您可以使用 `pytest.mark.repeat` 装饰该测试,然后在那里也给它一个数字。然后它像往常一样运行其余的套件。当它到达该测试时,它会运行它 10 次或您输入的任何数字。太棒了。

尝试查找间歇性测试失败时的一个很酷的技巧是为您的套件选择一个较大的数字。因此,如果您的套件运行时间为 5 分钟,那么选择 12 的计数将需要大约 1 小时。但是如果您的套件在一分钟内运行,那么您需要大约 60 的计数才能运行一小时。明白我的意思吗?选择一个数字。

足够长的时间来命中,选择一个足够长的时间,您认为您会遇到间歇性故障。然后您可以使用 `--count` 运行套件,然后 `repeat scope=session`,然后给出 `-x`。这将运行您的测试会话,然后在第一次失败时停止。打开这个。

然后去吃午饭什么的。如果在您回来之前发生故障,那么被测系统将处于故障状态,准备进行调试。不错。现在谈谈愚人节笑话。在 4 月 1 日,我发布了一集节目,声称 PyTest repeat 在 Python 3.14 上不起作用,这没有合理的理由。因此,Python 3.14 不会重复。这就是笑话。你们中的一些人明白了这是一个笑话。

这实际上是我在这个播客上第一次尝试愚人节恶作剧。但是有些人没有明白,我不怪你们。它真的不好笑,但我认为它很有趣。无论如何,你知道一句谚语,如果你必须解释你的笑话,它就不好笑吗?好吧,我们到了。所以,Python 3.14 是下一个主要的 Python 版本。

它将于今年晚些时候发布,但您现在可以使用 alpha 版本进行测试。3.14 也是 π 的开头数字。π 不重复。就像 π 的数字不重复一样。π 是一个无理数。无理数是指 π 不能表示为两个整数的比率。我正在玩弄这一切。没有合理的理由。

因为 π 是无理数。Python 不重复?听起来有点像 π 不重复。此外,我已经在做这个 pytest 插件系列了,所以我把 pytest repeat 混合进去,只是为了一个愚蠢的数学和 Python 笑话。无论如何,就是这样。这就是笑话。如果有人有更好的愚人节笑话或恶作剧想法在明年做,请告诉我。

顺便说一句,我经常使用 PyTest Repeat 并帮助维护它。我们刚刚发布了一个新版本,只有很少的更改。代码没有更改。只是围绕它的结构发生了变化。我们现在正在测试 Python 3.13 和 3.14,两者都在讨论中和 CI 中。现在就这些了。现在去测试一些东西吧。现在出去测试一些东西。现在出去测试一些东西。看到了吗?重复工作正常。我现在停下来。

感谢所有通过 Patreon 或通过 courses.pythontest.com 上的课程学习 PyTest 来支持该节目的所有人。我最近做了一个我很兴奋的改变。《完整的 PyTest 课程》现在是《完整的 PyTest 课程套装》。它曾经是一个大型课程,现在是三个课程。

因为您在 PyTest 之旅的不同阶段确实需要它们。第 1 部分,《PyTest 主要力量》,提供了一个循序渐进的介绍,涵盖了 PyTest 的超能力,包括夹具、参数化、标记等等。掌握主要力量并开始工作。第 2 部分,《使用 PyTest 进行项目开发》,包含调试、模拟、持续集成等战略性主题。第 2 部分非常适合您将 PyTest 应用于工作或开源项目时使用。第

第 3 部分:《PyTest 助推火箭》,探索插件,包括第三方插件和构建您自己的插件,

以及高级参数化。虽然第 3 部分可以在其他两部分之后立即学习,但最好先使用 pytest 一段时间,然后再探索您可以用它做更多的事情。我还为每个课程的开头添加了新的介绍视频,结尾添加了祝贺视频和可打印证书。无论如何,我认为新的结构更有意义。这些都在 courses.pythontest.com 上。今天就到这里。感谢收听。现在去测试一些东西吧。