鼻子 vs pytest - 应该让我选择的(主观)差异是啥? [关闭]

Posted

技术标签:

【中文标题】鼻子 vs pytest - 应该让我选择的(主观)差异是啥? [关闭]【英文标题】:nose vs pytest - what are the (subjective) differences that should make me pick either? [closed]鼻子 vs pytest - 应该让我选择的(主观)差异是什么? [关闭] 【发布时间】:2014-05-16 09:41:02 【问题描述】:

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

nose 和 pytest 都支持这样的事情,因为它们支持多种粒度的固定装置,因此我们正在考虑切换到 nose 或 pytest。这两个库还支持“标记”测试并仅运行这些标记的子集,这也是我们想做的事情。

我一直在浏览nose和pytest的文档,据我所知,这些库的大部分基本上都支持相同的功能,除了它可能有不同的命名,或者需要稍微不同的语法.另外,我注意到可用插件的一些小差异(nose 支持多进程,例如 pytest 似乎没有)

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

所以我想提出一个主观论证,为什么我应该使用鼻子或 pytest 来选择最适合我们需求的库/社区组合。

【问题讨论】:

刚刚注意到here 也提出了或多或少相同的问题 - 但那是五年前的事了,所以我仍然认为重新提出这个问题是有道理的 pytest 确实通过pytest-xdist 插件支持多进程。 顺便说一句,上下文管理器只是普通的 Python 对象,您可以在 TestCase.setUp() 中调用 manager.__enter__(),在 tearDown() 中调用 manager.__exit__() 鼻子是no longer being maintained。 【参考方案1】:

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

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

也就是说,我听说现在nose 有用于无类测试和断言自省的插件,所以你可能会很好地使用其中任何一个。不过,我仍然觉得我可以使用 py.test 开始运行,而且我可以理解它中断时发生的情况。

【讨论】:

一些隐藏回溯的问题已在很多年前的鼻子 0.11 左右得到修复。由于 Python 3 端口,我希望任何 unicode 回溯都不那么频繁(尽管我个人认为我只遇到过一次鼻子的 unicode 问题,当它与一些测试用例基类结合时出现了一些“技巧”,但没有t 真的很有意义——结果证明这不是鼻子的错)。事实上,我怀疑这两种工具多年来都被磨掉了粗糙的边缘,所以也许你会最喜欢你最近使用的那个;-) 最近的文档部分怎么样。我也很困惑是使用nosetests还是py.test。两者似乎都一样好,但正如我所读到的,这些天大多数人都在使用鼻子测试。当 py.tests 有更好的多处理库可用时,可能是什么原因? @proprius 可能只是鼻子测试先出现。一些框架添加了对它的支持,使用这些框架的项目默认使用它,并且它传播开来。此外,虽然 py.test 可以运行鼻子和单元测试测试,但它通常的风格不是围绕类安排的,所以移植到 py.test 可能会让人望而生畏。 我已经开始阅读 pytest 的文档部分,我意识到对于多处理目的以及学习新手来说,pytest 是一个更好的选择。

以上是关于鼻子 vs pytest - 应该让我选择的(主观)差异是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.8 和鼻子:冲突的模型?

当我在 Git Bash 的 VS Code 中执行 pytest 时,本地的 pyspark 出错

Pytest VS Unittest 简单说一下之间的优缺点

入门4-Pytest测试用例运行方式命令行方式运行

React 的样式化组件 vs jss vs 情感

VS2010中出现无法嵌入互操作类型