以漂亮的表格形式显示Python单元测试结果

31

我正在编写一个Pythonic工具,用于验证某个系统的正确性。每个验证都是用Python的unittest编写的,并且报告看起来像这样:

test_exclude_list_not_empty (__main__.TestRepoLists)
Assert the the exclude list is not empty ... ok
test_include_list_not_empty (__main__.TestRepoLists)
Assert the the include list is not empty ... ok
test_repo_list_not_empty (__main__.TestRepoLists)
Assert the the repo list is not empty ... ok

在我看来,这种格式很难阅读,特别是对于不熟悉Python的人而言。是否有任何报告生成器可以以漂亮的表格形式生成报告,例如:

+----------------------------------------------------------------+-----------+
| Test                                                           |  Status   |
+----------------------------------------------------------------+-----------+
| Assert the the exclude list is not empty                       |  OK       |
| Assert the the include list is not empty                       |  OK       |
| Assert the the repo list is not empty                          |  OK       |
| All the items in the include list should be in the repo list   |  OK       |
+----------------------------------------------------------------+-----------+

澄清 测试套件在远程终端上运行,因此我更喜欢使用命令行报告工具。

3个回答

34

虽然不完全符合你的要求,但是这里有几个选项可以使测试输出易于阅读:

  • HTMLTestRunner 以表格形式生成易于使用的 HTML 测试报告。 这里是一个样本报告。
  • nose-html-output 插件适用于nose测试运行器
  • unittest-xml-reporting - 基于 PyUnit 的测试运行器,具有类似 JUnit 的 XML 报告
  • 使用带有--with-xunit选项的 nose 将生成易于阅读和转换的 junit xml 样式报告

另请参见:

如果你仍然希望在控制台中以表格形式查看测试结果,我认为一个好的主意是编写你自己的 nose 插件或基于unittest.TestProgram的测试运行器,就像在 HTMLTestRunner 中所做的那样。

希望能够帮到你。


1
当然,您可以在服务器端安装任何这些生成XML / HTML的工具,并在远程终端shell上使用。但是,在这种情况下,您需要首先下载报告才能在浏览器中查看它们。或者,您可以使用基于文本的Web浏览器(如[lynx](http://lynx.browser.org/))直接在控制台中查看报告。 - alecxe
那会使事情变得过于复杂。我认为在shell中进行简单的制表就可以了。 - Adam Matan
同意,那就考虑使用自定义运行器或nose插件。我认为没有针对这个特定问题编写的东西。 - alecxe
谢谢。我会尝试创建自己的测试类。只是想确认我没有重复造轮子。 - Adam Matan
如果回答以“这不完全是你所问的”开头,那么这个答案就不值得阅读或发布。 - User9123
@User9123 嘿,你的评论非常有价值。成就已解锁。 - alecxe

11

我想把我的信息作为评论添加到alecxe的答案中,但是我没有足够的声望来这样做。

如果有人仍在寻找答案,我将HTMLTestRunner分叉成一个简单的TestRunner,它具有表格,彩色和友好终端的输出。 这是其输出的示例:

Example

源代码在https://gist.github.com/viniciusd/73e6eccd39dea5e714b1464e3c47e067

我会很快从头开始重写它,但保留输出格式。


源代码链接已失效。你有更新的链接可以分享吗? - Deep
好的,我会在Github上建立一个漂亮的代码库之前,先将它托管在Gist上。 - Vinicius Dantas
使用Python 2,无法发现测试。 - Akshay Gundewar

3

请看一下Twisted的Trial

默认情况下,它使用TreeReporter测试运行器,如下所示:

Trial's reporting

它具有以下特点:

  • 命令行报告,只需运行:

    trial test_name.py

  • 彩色输出:红色表示失败,绿色表示成功。

  • 报告使用类似树状结构的方式。它显示了测试用例下的测试,允许您快速遍历结果以找到特定的测试。(虽然它提供了几个更多的报告)。

  • 它还包括一个测试库,源自Python的unittest.TestCase。您可以通过子类化twisted.trial.unittest.TestCase来使用此库。这提供了一些额外的断言方法

  • 它包括生成测试语句覆盖率的选项。


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