单元测试彩色输出

52

我使用 unittest(实际上是 unittest2) 进行 Python 测试,配合 Python Mock 进行对象模拟,而且使用 nose 以单一步骤运行所有测试。

我想知道是否有方法使 unittest 输出带有颜色的显示,从绿/红条中一目了然地看出哪些测试通过了,哪些没有。

(在这个阶段更改测试套件不是一个选择,我也喜欢 unittest)


1
你之前用的是什么东西,有绿色/红色条形图? - Ali
9个回答

31

使用一个非常类似于Robert的回答的方法,我(今天!)发布了一个包,可以在unittest测试结果中启用彩色输出。我把它叫做colour-runner

要安装它,请运行:

pip install colour-runner

那么,如果您之前使用了unittest.TextTestRunner,现在请改用colour_runner.runner.ColourTextTestRunner

可以看一下这里 verbosity=1的效果...还有verbosity=2


这个程序可以在哪些平台上运行?我问这个问题是因为在Windows终端中的颜色与Linux和OS X终端中的颜色非常不同。 - robert
这是一个很好的问题。我在Linux和OS X上进行了测试,但我没有Windows机器来测试它。我使用两个库来进行输出。blessings库声称在Windows上与colorama一起使用时“应该可以工作”,所以可能需要额外安装这个包。我找不到任何关于pygments是否支持Windows的提及,但我怀疑如果不支持,colorama可能会解决这个问题。我非常想知道在Windows上这个如何工作。 - meshy
我能否请您解释一下“踩”的含义,以便我可以做出改进?单独的“踩”并不能很好地促进建设性行动。 - meshy
这个能否与nosetests一起使用,类似于rednose的方式? - naught101
@naught101 我非常确定这不适用于 nose - meshy
显示剩余3条评论

21

我在使用nosetests和rednose时取得了不错的成功。目前为止它仍然保持着维护。


2
easy_install 对我来说失败了,但 pip 运行良好:sudo pip install rednose - Eneko Alonso
1
这对我有用,nosetests --verbosity=2 --rednose ./,我正在使用Python 3.6.8和Nose 1.3.7。谢谢! - Gui LeFlea

13
在 Python 2.x 中,您可以尝试使用 pyrg。但在 Python 3 中不起作用。

这绝对是最简单的解决方案。 - Andrea
我找到了最新版本(0.2.6),如果以命令行模式运行,只会等待1毫秒来读取标准输入的数据 - 如果没有收到任何数据,则会出现使用消息。更改轮询超时时间为1000毫秒很容易。 - Tom Dalton

12
创建一个继承自unittest.TestResult的类(比如说MyResults),并实现一堆方法。然后创建一个继承自unittest.TextTestRunner的类(比如说MyRunner),覆盖_makeResult()方法以返回一个MyResults的实例。
接下来,构建一个测试套件(你可能已经有这个工作了),并调用MyRunner().run(suite)
可以把任何行为都放到MyResults中,包括颜色。

9
如果您正在这样运行pytest:
python -m unittest test_my.py

将其改为:

pytest test_my.py

同时你将免费获得颜色


9

pytest可以无需更改单元测试就能实现此功能。

enter image description here

现在安装pytest。

pip install --user pytest

并运行测试以查看颜色!

enter image description here


3
如果您只想更改测试导入的行,您可以使用redgreenunittest。这是我制作的unittest的克隆版,但它具有彩色输出功能。
如果您不想更新任何代码内容,只需像这样使用即可:
import redgreenunittest as unittest

它不是unittest2的克隆,因此它不能直接与Andrea的代码一起使用,但是它的源代码就在那里,因此可以考虑将redgreenunittest分支为unittest2

另外,任何“你做错了”的评论都受到欢迎,只要它们包含一些理由。我很想做得正确。


2

我还发现了另一个用于nose测试框架的着色插件:YANC,它位于https://pypi.python.org/pypi/yanc

在我的Python 3.5和nose 1.3.7上可以使用(我无法让其他列出的nose选项正常工作)


这应该是被采纳的答案^^ 这个颜色可爱,而且比其他鼻子插件好。 - Nam G VU

1

尝试使用rudolf插件进行nosetests测试。


没有Python 3版本:/ - naught101

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接