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