鼻子vs pytest - 应该让我选择的(主观)差异是什么?

时间:2014-04-04 07:45:48

标签: python pytest nose

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

鼻子和pytest都支持这样的东西,因为它们支持许多粒度的固定装置,所以我们正在寻求切换到鼻子或pytest。这两个库都支持“标记”测试,并且只运行这些标记的子集,这也是我们想要做的事情。

我一直在仔细查看nose和pytest的文档,据我所知,这些库中较大的部分基本上支持相同的功能,除了它可能被命名不同,或者需要稍微不同的语法。另外,我注意到可用插件的一些细微差别(鼻子有多进程支持,例如pytest似乎没有)

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

所以我要问一个主观的论证,为什么我应该选择鼻子或pytest来选择最适合我们需要的图书馆/社区组合。

1 个答案:

答案 0 :(得分:73)

我曾经使用Nose因为它是Pylons的默认值。我根本不喜欢它。它在多个地方都有配置卷须,几乎所有东西似乎都是用一个未充分利用的插件完成的,这使得它更加间接和混乱,并且因为它默认进行了单元测试,它经常打破Unicode追踪,隐藏错误的来源。

过去几年,我对py.test感到非常满意。只需用assert开箱即可编写测试,就会让我讨厌更少地编写测试方式,并且在核心上黑客攻击任何我需要的东西都非常简单。它不仅仅是一个固定的插件接口,而是只有很多钩子,而且你需要进一步深入挖掘相当容易理解的源代码。我甚至在py.test下编写了一个用于运行Testify测试的适配器,并且使用Testify比使用py.test更麻烦。

那就是说,我听说鼻子有无类别测试的插件,现在断言内省,所以你可能也会做得很好。我仍然觉得我可以用py.test运行,但是我能理解它在发生时会发生什么。