Display python unittest results in nice, tabular form [closed]
Asked Answered
Y

3

31

I am writing a Pythonic tool which validates the correctness of a certain system. Each validation is written as a Python unittest, and the report looks like:

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

In my opinion, this format is hard to read, especially for non-Pythonists. Is there any report generator that can generate a report in a nice, tabular form, e.g.:

+----------------------------------------------------------------+-----------+
| 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       |
+----------------------------------------------------------------+-----------+

Clarification The test suite runs on a remote terminal, so I prefer command line reporting tools.

Yser answered 18/6, 2013 at 7:12 Comment(0)
G
34

This is not exactly what you are asking, but there are several options for having a readable test output there:

  • HTMLTestRunner generates easy to use HTML test reports in a tabular form. Here's a sample report.
  • nose-html-output plugin for nose test runner
  • unittest-xml-reporting - PyUnit-based test runner with JUnit like XML reporting
  • nose with --with-xunit option will produce junit xml style reports that are easy to read and convert

Also see:

If you want to see test results in a tabular form in the console anyway, I think that a good idea would be to write your own nose plugin or test runner based on unittest.TestProgram as it was done in HTMLTestRunner.

Hope that helps.

Grous answered 18/6, 2013 at 7:25 Comment(6)
Well, sure, you can install any of these xml/html producing tools on the server-side and use on a remote terminal shell. But, in this case you'll need to download reports first to see them in the browser, of course. Or, alternatively, you can use a text-based web browser like lynx to see reports right in the console.Grous
That would overcomplicate the matters. I think that a simple tabulation within the shell will do.Yser
Agreed, then consider going with custom runner or a nose plugin. I don't think there is anything written out there specifically for this particular problem.Grous
Thanks. I will try to create a test class of my own. Just wanted to make sure I'm not reinventing the wheel.Yser
You know that an answer is not worthy to be read nor posted if it starts with "This is not exactly what you are asking"Kelikeligot
@Kelikeligot hey, it was worth a worthy comment. Achievement unlocked.Grous
S
10

I would like to add my information as a comment into alecxe's answer, but I do not have enough reputation for that.

In case of someone still looking for an answer, I forked HTMLTestRunner into a simple TestRunner, which has a tabular, colored, terminal-friendly output. This is a sample of its output:

Example

The source code is at https://gist.github.com/viniciusd/73e6eccd39dea5e714b1464e3c47e067

I shall rewrite it from scratch soon but keeping the output format.

Sectarian answered 28/7, 2015 at 1:6 Comment(3)
The source code link no longer works. Do you have an updated link to share?Citrate
Ok, I am hosting it on Gist while I do not set a nice repository on GithubSectarian
with python 2, it is not able to discover tests.Cassycast
S
3

Take a look at Twisted's Trial.

By default, it uses the TreeReporter test runner, which looks like:

Trial's reporting

It has the following:

  • It's a command line report, just run:

    trial test_name.py

  • Colored output: red for failure, green for success

  • The report uses a tree like structure. It displays the tests under the TestCases they belong, allowing you to quickly traverse the results to find a specific test. (Although it provides a couple of more reports).

  • It also includes a test library, derived from Python's unittest.TestCase. You can use this library by subclassing twisted.trial.unittest.TestCase. This provides a few more assertion methods.

  • It includes the option to generate statement coverage for your tests.

Settling answered 18/6, 2013 at 14:42 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.