We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
cover of episode pytest plugins - a full season

pytest plugins - a full season

2025/1/10
logo of podcast Test & Code

Test & Code

AI Deep Dive AI Insights AI Chapters Transcript
People
B
Brian Okken
Topics
Brian Okken: 我主要开始使用 Pytest 是因为它强大的 fixture 系统。和其他测试系统中的 setup 和 teardown 类似,但 Pytest 的 fixture 更加模块化、灵活,可以在整个测试套件中使用,并且可以通过插件系统与其他项目共享。 Pytest 的插件系统允许插件共享 fixture 和 hook 函数。hook 函数是修改 Pytest 行为的一种方式,例如添加命令行标志或根据运行时因素取消选择或跳过测试。 PyPI 上有大量的 Pytest 插件,数量至少有 1487 个,这得益于其强大的插件系统。pytest.org 上有一个插件列表,列出了这些插件,它们都是通过搜索 PyPI 上以 `pytest-` 开头的项目找到的。PyPI 上有超过 10000 个与 pytest 相关的项目,这有点多,因此我整理了一个更精简的列表,在 pythontest.com 上,名为 Top PyTest Plugins,它基于过去 30 天的下载次数排名,目前包含 133 个插件。 我使用了 Hugo VK 网站上的 Top PyPI Packages 数据集,该数据集每月更新一次,包含 PyPI 上下载次数最多的 8000 个软件包。我从中筛选出了 133 个 pytest 插件,并排除了不再受支持的软件包和 pytest 本身。这个列表会随着时间的推移而变化。 在这个系列中,我将介绍一些流行的 pytest 插件,并邀请听众分享他们喜欢的插件。我也邀请 pytest 插件的作者参与节目,讨论他们的插件。我将根据插件的流行度和个人兴趣选择介绍的插件,并非严格按照下载次数排名。 排名第一的插件是 pytest-cov,用于测量代码覆盖率,它使用 Coverage.py 并提供一些便利功能。其他一些插件,例如 pytest-asyncio、pytest-metadata、pytest-html、pytest-timeout、pytest-ordering、pytest-repeat、pytest-check 和 pytest-playwright,我也会进行介绍。pytest-check 是我自己的插件,它允许每个测试用例出现多个错误。pytest-md-report 插件可以生成 markdown 格式的测试结果报告。 我从 Top PyPI Packages 获取插件信息,包括名称、链接和下载次数,并从 PyPI API 获取插件描述。我将介绍排名前九的插件,包括 pytest-cov、pytest-mock、pytest-xdist、pytest-asyncio、pytest-metadata、pytest-html、pytest-timeout、pytest-rerunfailures 和 pytest-django,因为我正在开发一个 Django 项目。 这个系列的目的是让大家了解 pytest 插件,推广我的 Top PyTest Plugins 列表,并分享一些插件的使用经验。一些章节可能会比较短,因为有些插件我不太了解。我可能会将功能相似的插件组合在一起介绍,例如不同的排序插件。即使不使用某些插件,也可以学习它们在 fixture 或 hook 函数方面的用法。 pytest 的文档在 hook 函数的使用方面可能还不够完善,编写 pytest 插件的教程或书籍将很有帮助。我计划在这个系列中讨论插件的源代码和 hook 函数的使用。

Deep Dive

Key Insights

What makes PyTest fixtures unique compared to other test systems?

PyTest fixtures are more modular, flexible, and reusable across a test suite. They can also be shared with other projects through the plugin system, making them highly versatile.

What is the purpose of hook functions in PyTest plugins?

Hook functions allow plugins to modify PyTest's behavior, such as adding command-line flags or deselecting/skipping tests based on runtime factors.

How many PyTest plugins are listed on PyPI?

There are at least 1,487 PyTest plugins listed on PyPI, identified by searching for projects that begin with 'pytest-' or 'pytest_'.

What is the Top PyTest Plugins list on pythontest.com based on?

The Top PyTest Plugins list is based on the number of downloads over the past 30 days, currently featuring 133 plugins.

What is the most downloaded PyTest plugin?

The most downloaded PyTest plugin is PyTestCov, which measures test coverage using Coverage.py and provides additional conveniences.

What is PyTest Metadata used for?

PyTest Metadata is used to add metadata to test reports, often in conjunction with PyTest HTML, and is one of the most popular plugins.

What is PyTest Playwright, and why is it notable?

PyTest Playwright is a plugin for testing web applications using Playwright. It is notable for its utility in web projects and is on the speaker's list of plugins to explore.

What is PyTest MD Report, and how is it used?

PyTest MD Report generates test outcome reports in Markdown table format, making it useful for piping output to websites or other readable formats.

What are some of the top PyTest plugins mentioned in the episode?

The top PyTest plugins include PyTestCov, PyTestMock, XDist, AsyncIO, Metadata, HTML, Timeout, RerunFailures, and PyTest Django.

Why is learning from plugin source code valuable?

Learning from plugin source code provides insights into advanced uses of fixtures and hook functions, which are often not fully covered in official documentation.

Shownotes Transcript

我最初使用PyTest主要是为了它的fixture系统。PyTest的fixture有点像其他测试系统中的setup和teardown,但是它更加模块化、灵活,并且可以在整个测试套件中使用,你还可以通过插件系统与其他项目共享它们。欢迎收听Test & Code。本期节目由HelloPytest赞助播出,HelloPytest是学习PyTest的最快方法,也由Python Test社区赞助。更多信息请访问courses.pythontest.com。

PyTest插件系统允许插件共享fixture,也允许它们共享hook函数。那么什么是hook函数呢?hook函数是一种修改PyTest行为部分的方法。几个常见的例子是,例如,添加一个命令行标志,以便能够将信息传递给测试运行。你可以用hook函数来做到这一点。

另一个例子是根据某些运行时因素来取消选择或跳过某些测试。你也可以在hook函数中做到这一点。这个允许共享fixture和hook函数的插件系统非常强大和流行,在PyPI上至少有1487个itest插件。

我从哪里得到这个数字的?如果你访问pytest.org,你会看到一个网站,上面有一个pytest插件列表,列出了1487个插件。这是通过在PyPI上搜索pytest来完成的。实际上,项目名称以pytest-或pytest-开头,因为这是一个常见的约定。如果你直接去PyPI,你可以搜索pytest,它会显示

超过10000个项目。这有点让人不知所措。所以,虽然我很感谢将数量限制在1487个,但这仍然很多。那么我们应该怎么做呢?pythontest.com上有一个替代列表。我整理了一个列表,叫做Top PyTest Plugins,它是根据过去大约30天的下载次数统计得出的,并且

该列表目前包含133个插件。虽然流行度并非一切,但我对下载次数最多的Bytes插件感到好奇,这就是我整理这个列表的原因。

我实际上使用了Hugo VK网站上的另一个数据集,叫做Top PyPI Packages。这个数据集大约每月更新一次,会导出PyPI上下载次数最多的8000个包。我抓取了所有8000个包,并搜索了pytest.py。

在这个列表中,我做了一些排除。有些包已经不再支持了,所以没有必要查看它们。还有PyTest本身,它不是一个插件,所以这些都被从列表中删除了。这就是为什么现在有133个项目,但这个数字可能会随着时间的推移而改变。所以这个列表和PyTest插件是我们这个季度要关注的重点。

我们不会遍历所有133个插件,但我们会遍历相当一部分。我们也不会仅仅局限于此。还有其他非常酷的插件可能不在这个列表中。我希望你能分享你最喜欢的插件,无论是否在这个列表中,或者你想让我看看的插件,我们可以在节目中讨论。如果你是一个插件爱好者,

作者,并且你真的认为你的插件应该被讨论,或者你想谈论作为pytest插件的作者,或者某个特定的插件或两个或三个,请告诉我,我很乐意尝试让一些人参与到节目中来。

所以我有了这个从1到133的顶级插件列表,它不会按从上到下的顺序排列,但我可能会从一个顺序开始,然后根据我自己的喜好跳来跳去。我使用的东西,我可以很容易地谈论。有些东西我可能需要做一些研究。而且......

有些,我根本不感兴趣。另外,我真的很不想在这个季度做133集节目,但我们会看到的。谁知道呢?可能会更长,但可能不会。例如,让我们看看排名靠前的。

下载次数最多的插件是PyTestCov。这是一个用于测量覆盖率的PyTest插件。它实际上使用了Coverage.py,并提供了一些便利。我不会说得太多,因为我想在下一集节目中讨论它。所以我们将在下一集节目中使用PyTestCov。但是这里还有很多很棒的插件。让我们看看列表中的其他插件。

目前排名第四的是PyTest AsyncIO。听起来很酷。我不写很多异步代码,但这将是我很想和某个人讨论的,无论是插件作者还是任何定期使用它并想和我交谈的人。那将是很棒的。我一直在使用PyTest Metadata,它与PyTest HTML一起使用,但Metadata本身也可以使用。这些都非常棒。它们是第五和第六名。PyTest Timeout很有趣。

再往下看一点。PyTest ordering,有一些用于排序的插件,我想把它们放在一起讨论,这样可能更有意义。有PyTest repeat用于重复测试。我之前帮助维护过这个插件。PyTest check是我的插件。这是第24名。这是我自己的插件之一。它允许每个测试用例出现多个特性、多个失败。

PyTest Playwright。这是我想要尝试的列表中的一个,因为我正在做一个web项目。所以我确实想尝试PyTest Playwright,但是和其他人一起讨论这个会很有趣。还有什么?让我们往下看。底部附近有什么?PyTest MD Report排在第133位。这并不是下载次数最少的插件。这只是在我的列表中下载次数最少的。但是

它仍然每月有112000次下载。所以PyTest插件的下载量很大。这个插件是一个PyTest插件,用于使用markdown表格格式生成列表测试结果报告。很酷。所以是用markdown格式报告结果。如果你将输出管道传输到某个可以更好地读取它的位置,这将非常酷,或者......

是的,也许是到某个网站或其他地方。这很酷。我一定会检查一下这个。如果我......我正在查看这个列表,我用这个列表做了什么,它有数字、插件的名称,以及插件的链接,还有下载次数。而且,所以这些都是直接从Top PyPI Packages获取的。

然后我还想添加描述。这个插件的描述是:一个PyTest插件,用于使用Markdown表格格式生成测试结果报告。我直接从PyPI获取这些信息。PyPI有一个API可以提取这些信息。所以所有这些描述、名称和链接都在Top PyTest plugin列表中。

是的,这部分是我获取这些信息的地方。就像我说的,我也会涵盖其他内容。流行度并非一切。列表顶部的插件不会太令人惊讶。让我们实际谈谈其他一些顶级插件。让我们浏览一下前九名,因为这些都是我肯定会谈论的。可能不止这些。是的,不止这些。但前九名是PyTestCov、PyTestMock、XDist、AsyncIO、Metadata、HTML、Timeout、RerunFailures,

第九名是PyTest Django。我肯定会谈论这个,因为我正在做一个Django项目。这些都会被涵盖,但我不会......我不知道我会马上做还是跳来跳去。谁知道我会怎么想。所以这是关于预先存在的插件的,我想要这么做的原因有几个。首先,我想让人们知道这些插件,而不用自己去寻找它们。

其次,我想宣传我的Top PyTest plugin列表,但我并没有从中赚钱,所以我不明白为什么。

第三,只是听一些其他的东西很好。而且剧集可能会很短。我可能有一些简短的剧集,因为我对某些东西不太了解。但我不想把事情混在一起太多。如果有很多随机的插件,我们可能会把它们放在一起。我们可能会把它们放在一起。然后有一些不同的排序插件,我们可能会把它们放在一起。因为当我们考虑的时候,这是有意义的

如果你要重新排序东西,使用哪个排序插件,把它们放在一集里是有意义的。但是很多插件可能只是单个插件,我们会看看。现在,有很多插件你应该看看,即使你不会使用,因为......

它们要么会向你展示fixture的一些酷炫用法,要么会向你展示hook函数的一些酷炫用法。我发现学习如何从使用hook函数的例子中使用hook函数是最好的方法。现在有PyTest文档,它非常好,但是关于hook函数以及如何使用hook函数,我认为它可能仍然有所欠缺。这是......

我认为如何编写PyTest插件,这实际上将是一个不错的课程或书籍。我在《使用PyTest进行Python测试》和《完整的PyTest课程》中确实有一节内容,所以无论是书籍形式还是视频课程形式,我都涵盖了构建插件,但我并没有讲解所有的hook函数,只讲解了一些。

所以,人们有机会加入进来。无论如何,这个介绍越来越长了。我将讨论的不仅仅是一些你需要了解的插件,还有一些你可能想查看其源代码的插件,以及一些

我还可能会讨论一些这些hook函数以及如何利用它们以及它们的作用。这可能是一件有趣的事情。我不确定这个系列会走向何方,但我认为做一个PyTest插件系列会很有趣。所以,欢迎。谢谢。

感谢您的收听,并感谢所有通过购买课程来支持节目的朋友,包括Hello PyTest(学习PyTest的最快方法)和完整的PyTest课程(如果你想真正成为PyTest专家)。两者都可以在courses.pythontest.com上找到,你也可以在那里加入Python测试社区。现在就到这里。现在去测试一些东西吧。