鼻子vs pytest-我应该选择哪一个(主观)差异?[关闭]


85

我已经开始处理一个相当大的(多线程)Python项目,其中包含(单元)测试的负载。那里最重要的问题是,运行应用程序需要预设的环境,该环境由上下文管理器实现。到目前为止,我们利用了补丁版本的单元测试运行器,它将在此管理器中运行测试,但是不允许在不同的测试模块之间切换上下文。

鼻子和pytest都支持这种东西,因为它们支持多种粒度的夹具,因此我们正在考虑切换到鼻子或pytest。这两个库都将支持“标记”测试,并且仅运行这些标记的子集,这也是我们也想做的事情。

我一直在浏览一下鼻子和pytest的文档,据我所知,这些库的大部分基本上支持相同的功能,只是它的名称可能不同,或者需要稍微不同的语法。另外,我注意到可用插件中的一些细微差异(鼻子具有多进程支持,例如pytest似乎没有)

看起来,细节决定了魔鬼,这(通常至少)意味着个人品味,我们最好选择最适合我们个人品味的图书馆。

因此,我想提出一个主观的论证,为什么我应该选择鼻子或pytest才能选择最适合我们需求的库/社区组合。


刚刚指出,在这里也差不多提出了同样的问题-但是那是五年前的事,所以我仍然认为重新提出这个问题是有道理的-Jakob
van Bethlehem

9
pytest确实通过pytest-xdist插件支持多进程支持。
Bruno Oliveira 2014年

2
顺便说一句,上下文管理器只是普通的Python对象,你可以打电话给manager.__enter__()TestCase.setUp(),并manager.__exit__()在你的tearDown()
rescdsk 2014年

Answers:


80

我以前使用过Nose,因为它是Pylons的默认设置。我一点都不喜欢。它在多个地方都有配置卷须,几乎所有事情似乎都由一个文档不足的插件完成,这使得所有插件都更加间接和令人困惑,并且由于默认情况下进行了单元测试,因此它经常会破坏Unicode追溯,隐藏了错误源。

过去几年,我对py.test非常满意。能够assert开箱即用地编写测试,这使我讨厌编写测试的方式减少了,并且在核心之上窃取所需的一切非常容易。它没有固定的插件接口,而是有大量的钩子,如果您需要进一步研究,还可以理解源代码。我什至编写了一个用于在py.test下运行Testify测试的适配器,并且与py.test相比,使用Testify遇到的麻烦更多。

就是说,我听说鼻子现在有用于无类测试的插件并断言自省,因此您可能会对其中任何一个都做得很好。不过,我仍然觉得我可以使用py.test运行,并且我可以理解当它崩溃时发生了什么。


2
隐藏回溯的一些问题已在多年前修正为鼻子0.11左右。自从Python 3端口以来,我希望任何Unicode回调都不会那么频繁(尽管我个人认为我只遇到过一次鼻子鼻子Unicode问题,当将它与一些测试用例基类结合使用时会出现这种情况,而该类做了一些“技巧”,确实是有道理的-因此证明这不是鼻子的错)。我怀疑实际上这两个工具多年来已经消除了粗糙的边缘,所以也许您会最喜欢最近使用过的工具;-)
Croad Langshan

最近的文档部分呢?我也很困惑是否使用鼻子测试或py.test。两者似乎都一样好,但据我所读,如今大多数人都在使用鼻子测试。py.tests具有更好的多处理库集可能是什么原因?
proprius

1
@proprius可能只是鼻子测试排在第一位。一些框架增加了对它的支持,使用这些框架的项目默认情况下会使用它,并且它会不断传播。同样,虽然py.test可以运行鼻子测试和单元测试,但它的通常样式并未围绕类安排,因此移植到py.test可能会令人生畏。
伊芙

4
我已经开始阅读pytest的文档部分,并且我意识到,对于多处理目的以及对于newbee的学习而言,pytest是更好的选择。
proprius
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.