Publish unittest results from test discovery

L

Lucretiel

So I've started using unittest, and I love it. I use testdiscovery (python -m unittest discover) so that I can distribute my tests and don't have to manage them all manually. I wanted to start publishing my test results to xml, though. I found xmlrunner by googling around, but it requires me to add an if __name__ == '__main__' block to my code, which isn't executed by unittest discover. Is there a way to get unittest disover to work with xmlrunner, or to some other way to solve this without restructuring all my testcode?
 
S

Steven D'Aprano

On Fri, 24 Aug 2012 17:25:05 -0700, Lucretiel wrote:

[...]
Is there a way to get unittest disover to work with xmlrunner

Steady on there! It's only been about an hour and a half since you last
asked this exact same question, almost word-for-word identical. The more
specialised the question, the longer it may take for somebody who knows
the answer to reply. For something like this, I would wait at least a
couple of days before replying to your original post. (Don't just re-post
the question in a new thread, keep the response in a single thread.)

I have no idea about xmlrunner and unittest discovery, sorry.
 
M

Mark Lawrence

On Fri, 24 Aug 2012 17:25:05 -0700, Lucretiel wrote:

[...]
Is there a way to get unittest disover to work with xmlrunner

Steady on there! It's only been about an hour and a half since you last
asked this exact same question, almost word-for-word identical. The more
specialised the question, the longer it may take for somebody who knows
the answer to reply. For something like this, I would wait at least a
couple of days before replying to your original post. (Don't just re-post
the question in a new thread, keep the response in a single thread.)

I have no idea about xmlrunner and unittest discovery, sorry.

I entirely agree with Steven's comments. I'd put a question like this
on a specialised list. How about gmane.comp.python.testing.general ?
Sorry I've no idea what it's called elsewhere.
 
P

Peter Otten

Lucretiel said:
So I've started using unittest, and I love it. I use testdiscovery (python
-m unittest discover) so that I can distribute my tests and don't have to
manage them all manually. I wanted to start publishing my test results to
xml, though. I found xmlrunner by googling around, but it requires me to
add an if __name__ == '__main__' block to my code, which isn't executed by
unittest discover. Is there a way to get unittest disover to work with
xmlrunner, or to some other way to solve this without restructuring all my
test code?

I don't see where you could specify a test runner on the commandline, but
you can reuse the discovery code in your own scripts. For the following
example I basically copied unittest.__main__.py:

$ cat discover.py
#!/usr/bin/env python
import xmlrunner

__unittest = True

from unittest.main import main, TestProgram, USAGE_AS_MAIN
TestProgram.USAGE = USAGE_AS_MAIN

main(module=None, testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
$ cat test_alpha.py
import unittest

class T(unittest.TestCase):
def test_alpha(self):
pass
def test_beta(self):
self.assertEquals(["a", "b", "c"], ["a", "B", "c"])
$ ./discover.py discover

Running tests...
----------------------------------------------------------------------
..F
======================================================================
FAIL [0.001s]: test_beta (test_alpha.T)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/somewhere/over/the/rainbow/discover/test_alpha.py", line 7, in
test_beta
self.assertEquals(["a", "b", "c"], ["a", "B", "c"])
AssertionError: Lists differ: ['a', 'b', 'c'] != ['a', 'B', 'c']

First differing element 1:
b
B

- ['a', 'b', 'c']
? ^

+ ['a', 'B', 'c']
? ^


----------------------------------------------------------------------
Ran 2 tests in 0.002s

FAILED (failures=1)

Generating XML reports...
$ ls
discover.py test_alpha.py test_alpha.pyc test-reports
$ ls test-reports/
TEST-test_alpha.T.xml
$
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,535
Members
45,007
Latest member
obedient dusk

Latest Threads

Top