nose与pytest - 我应该选择哪个,它们的(主观)区别是什么?
我最近开始做一个比较大的Python项目,这个项目是多线程的,还有很多单元测试。最重要的问题是,运行这个应用程序需要一个预设的环境,这个环境是通过一个上下文管理器来实现的。到目前为止,我们使用了一个修改过的单元测试运行器,它可以在这个管理器里面运行测试,但这样就不能在不同的测试模块之间切换上下文了。
nose和pytest这两个工具都支持这种功能,因为它们可以在很多层面上使用“夹具”(fixtures),所以我们正在考虑换用nose或pytest。这两个库还支持给测试打标签,只运行这些打了标签的子集,这也是我们想要实现的。
我查看了一下nose和pytest的文档,发现这两个库大部分功能基本相同,只是名字可能不同,或者语法稍微有点差别。此外,我还注意到它们在可用插件上有一些小差异(比如nose支持多进程,而pytest似乎不支持)。
所以看起来,关键在于细节,这通常是个人喜好的问题,我们最好选择一个最符合我们个人喜好的库。
因此,我想请教一下,为什么我应该选择nose或pytest,以便找到最适合我们需求的库和社区组合。
1 个回答
我以前用Nose,因为它是Pylons的默认测试工具。但我一点都不喜欢它。它的配置分散在很多地方,几乎所有的功能都是通过一些文档不全的插件实现的,这让一切变得更加间接和混乱。而且因为它默认使用unittest测试,常常会出现Unicode错误信息,让我很难找到问题的根源。
这几年我对py.test挺满意的。它让我可以直接用assert
来写测试,这让我写测试的烦恼少了很多,想要在核心功能上做些修改也很简单。它没有固定的插件接口,而是有很多可以用的“钩子”,如果需要深入了解源代码也很容易。其实我还为在py.test下运行Testify测试写了个适配器,结果发现用Testify比用py.test麻烦多了。
不过我听说现在Nose也有支持无类测试和断言检查的插件,所以用哪个都应该没问题。尽管如此,我还是觉得用py.test上手更快,而且当出现问题时我能理解发生了什么。