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.
Hook functions allow plugins to modify PyTest's behavior, such as adding command-line flags or deselecting/skipping tests based on runtime factors.
There are at least 1,487 PyTest plugins listed on PyPI, identified by searching for projects that begin with 'pytest-' or 'pytest_'.
The Top PyTest Plugins list is based on the number of downloads over the past 30 days, currently featuring 133 plugins.
The most downloaded PyTest plugin is PyTestCov, which measures test coverage using Coverage.py and provides additional conveniences.
PyTest Metadata is used to add metadata to test reports, often in conjunction with PyTest HTML, and is one of the most popular plugins.
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.
PyTest MD Report generates test outcome reports in Markdown table format, making it useful for piping output to websites or other readable formats.
The top PyTest plugins include PyTestCov, PyTestMock, XDist, AsyncIO, Metadata, HTML, Timeout, RerunFailures, and PyTest Django.
Learning from plugin source code provides insights into advanced uses of fixtures and hook functions, which are often not fully covered in official documentation.
我最初使用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测试社区。现在就到这里。现在去测试一些东西吧。