Adding further report options to unittest.py

Diez B. Roggisch deets at nospam.web.de
Wed Sep 10 09:25:53 EDT 2008


Marco Bizzarri wrote:

> Hi all.
> 
> I would like to change the way test reports are generated, in a Zope
> environment.
> 
> I'm playing with TextTestReport, TextTestRunner. Since things are
> getting to complicated, I'm afraid I'm following a non-pythonic way.
> 
> Specifically, I would like to have an output like:
> 
> package.subpackage.test_module.TestCase 0.1
> 
> where 0.1 is the time spent into doing the test.
> 
> In a previous attempt, I made the tests print the number of the test
> executed, so that I would have the following output:
> 
> 1 package.subpackage.test_module.TestCase
> 
> however, to do this, I had to put things in the following way:
> 
> 
> class PAFlowTestRunner(TextTestRunner):
>     def _makeResult(self):
>         return PAFlowTextResult(self.stream, self.descriptions,
>         self.verbosity)
> 
> class PAFlowTextResult(_TextTestResult):
> 
>     def startTest(self, test):
>         self.stream.write("%s " % self.testsRun)
>         _TextTestResult.startTest(self, test)
> 
> 
> now, of course, this is ugly, because I'm using _TextTestResult, which
> I'm not supposed to know, and I'm changing behaviour by subclassing,
> which is not exactly what I would like to do.
> 
> What is the pythonic way to accomplish this?

Have you looked at nosetests? Nose is a test-discovery & running-framework
based upon unittest-module (but you can also "only" test simple functions,
very handy)

And it has a very powerful plugin-mechanism, that allows you to implement
cleanly what you want.

For each test, you get a start/end-method called in your plugin that you can
use to gather the information you need, e.g. start/stop-times.

For example, I've created an enhanced reporting plugin that lists all tests
run (not only those failed or error'ed), and adding time-measuring per-test
is on my list of todos. 

Diez





More information about the Python-list mailing list