Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python nose vs pytest-我应该选择哪一种(主观)差异?_Python_Pytest_Nose - Fatal编程技术网

Python nose vs pytest-我应该选择哪一种(主观)差异?

Python nose vs pytest-我应该选择哪一种(主观)差异?,python,pytest,nose,Python,Pytest,Nose,我已经开始着手一个相当大的(多线程)Python项目,其中包含大量(单元)测试。最重要的问题是,运行应用程序需要一个预设的环境,该环境由上下文管理器实现。到目前为止,我们使用了单元测试运行程序的补丁版本,该版本将在这个管理器中运行测试,但不允许在不同的测试模块之间切换上下文 nose和pytest都支持这样的东西,因为它们支持许多粒度的固定装置,所以我们正在考虑切换到nose或pytest。这两个库还支持“标记”测试,并且只运行这些标记的子集,这也是我们想要做的 我已经仔细阅读了nose和pyt

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

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

我已经仔细阅读了nose和pytest的文档,就我所知,这些库中的大部分基本上支持相同的功能,只是名称可能不同,或者需要稍微不同的语法。另外,我注意到了可用插件中的一些小差异(nose具有多进程支持,例如pytest似乎没有)

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


因此,我想提出一个主观的论证,为什么我应该选择nose或pytest,以选择最适合我们需要的图书馆/社区组合。

我曾经使用nose,因为它是挂架的默认组合。我一点也不喜欢。它在多个地方都有配置卷须,几乎所有的事情似乎都是通过一个文档不足的插件来完成的,这使得它更加间接和混乱,而且因为它默认进行单元测试,所以它经常使用Unicode回溯来中断,从而隐藏错误的来源

在过去的几年里,我对py.test很满意。能够用
assert
开箱即用编写测试让我讨厌编写测试,而在核心上编写任何我需要的东西都非常容易。它不是一个固定的插件接口,而是有成堆的钩子,如果您需要进一步挖掘,还可以理解源代码。我甚至编写了一个适配器,用于在py.test下运行autifest测试,并且使用autifest比使用py.test有更多的麻烦


这就是说,我听说nose现在有用于无类测试和断言内省的插件,所以您可能会很好地使用它们。尽管如此,我仍然觉得我可以用py.test开始运行,并且我可以理解当它崩溃时会发生什么。

刚刚注意到,或多或少也有人问过同样的问题——但那是五年前的事了,因此,我仍然认为重新回答这个问题是有意义的,
pytest
确实通过插件支持多进程。另外,上下文管理器只是简单的Python对象,您可以调用
manager.\uu在
TestCase.setUp()
manager.\uu退出
tearDown()
.Nose是。许多年前,在Nose 0.11左右修复了一些隐藏回溯的问题。由于Python3端口,我希望任何unicode回溯都不那么频繁(尽管我个人认为我只在nose上遇到过一次unicode问题,这是在将它与一些测试用例基类结合时出现的,这些基类做了一些没有真正意义的“把戏”——所以这不是nose的错)。事实上,我怀疑这两种工具在过去的几年中都有过粗糙的边缘,所以也许你会最喜欢最近使用的工具;-)最近的文档部分怎么样。我也不知道是使用鼻测试还是py.test。两者似乎都一样好,但正如我所读到的,现在大多数人都在使用鼻测试。当py.tests有更好的多处理库可用时,原因可能是什么?@proprius可能只是因为nosetests是第一位的。一些框架增加了对it的支持,使用这些框架的项目默认使用it,并且it得到了传播。另外,虽然py.test可以运行nose和unittest测试,但它通常的风格并不是围绕类来安排的,因此移植到py.test可能会让人感到畏惧。我已经开始阅读pytest的文档部分,我意识到对于多处理目的以及对于新手的学习,pytest是一个更好的选择。