You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A unittest test runner that can save test results to XML files in xUnit format.
The files can be consumed by a wide range of tools, such as build systems, IDEs
and continuous integration servers.
unittest has the concept of sub-tests for a unittest.TestCase; this doesn't map well to an existing xUnit concept, so you won't find it in the schema. What that means, is that you lose some granularity
in the reports for sub-tests.
unittest also does not report successful sub-tests, so the accounting won't be exact.
# run the tests storing results in memory out = io.BytesIO() unittest.main( testRunner=xmlrunner.XMLTestRunner(output=out), failfast=False, buffer=False, catchbreak=False, exit=False)
Transform the results removing extra attributes.
from xmlrunner.extra.xunit_plugin import transform
with open('TEST-report.xml', 'wb') as report: report.write(transform(out.getvalue()))
JUnit Schema ?
There are many tools claiming to write JUnit reports, so you will find many schemas with minor differences.
We used the XSD that was available in the Jenkins xUnit plugin version 1.100; a copy is available under tests/vendor/jenkins/xunit-plugin/.../junit-10.xsd (see attached license).
The script below, adapted from the
unittest, shows how to use
XMLTestRunner in a very simple way. In fact, the only difference between
this script and the original one is the last line:
deftest_shuffle(self): # make sure the shuffled sequence does not lose any elements random.shuffle(self.seq) self.seq.sort() self.assertEqual(self.seq, list(range(10)))
# should raise an exception for an immutable sequence self.assertRaises(TypeError, random.shuffle, (1,2,3))
if__name__=='__main__': unittest.main( testRunner=xmlrunner.XMLTestRunner(output='test-reports'), # these make sure that some options that are not applicable # remain hidden from the help menu. failfast=False, buffer=False, catchbreak=False)
Also, the following settings are provided so you can fine tune the reports:
setting
default
values
description
TEST_OUTPUT_VERBOSE
1
0|1|2
Besides the XML reports generated by the test runner, a bunch of useful information is printed to the sys.stderr stream, just like the TextTestRunner does. Use this setting to choose between a verbose and a non-verbose output.
TEST_OUTPUT_DESCRIPTIONS
False
True|False
If your test methods contains docstrings, you can display such docstrings instead of display the test name (ex: module.TestCase.test_method). In order to use this feature, you have to enable verbose output by setting TEST_OUTPUT_VERBOSE = 2. Only effects stdout and not XML output.
TEST_OUTPUT_DIR
"."
Tells the test runner where to put the XML reports. If the directory couldn't be found, the test runner will try to create it before generate the XML files.
TEST_OUTPUT_FILE_NAME
None
Tells the test runner to output a single XML report with this filename under os.path.join(TEST_OUTPUT_DIR, TEST_OUTPUT_FILE_NAME). Please note that for long running tests, this will keep the results in memory for a longer time than multiple reports, and may use up more resources.
Testing changes with tox
Please use tox to test your changes before sending a pull request.
You can find more information about tox at https://testrun.org/tox/latest/.