Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Pull request Compare This branch is 8 commits ahead, 19 commits behind collective:master.
Fetching latest commit...
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



This recipe is a merge of collective.xmltestreport and tranchitella.recipe.testrunner. It provides XML output for test and coverage report.

This package provides an extension to the test runner to the one that ships with zope.testrunner, as well as a buildout recipe based on zc.recipe.testrunner to install a test script for this test runner.

The test runner is identical to the one in zope.testrunner, but it is capable of writing test reports in the XML format output by JUnit/Ant. This allows the test results to be analysed by tools such as the Jenkins continuous integration server.

It also replaces the buildin coverage module from zope.testing with Ned Batchelder's. With this replacement it is also possible to write XML, HTML output.

Code repository

Git Repository and issue tracker:



In your buildout, add a part like this:

parts =


recipe = collective.xmltestreport
eggs =
defaults = ['--auto-color', '--auto-progress', '--coverage-xml', '--coverage-branch']

The recipe accepts the same options as zc.recipe.testrunner, so look at its documentation for details.

When buildout is run, you should have a script in bin/test and a directory parts/test.

To run the tests, use the bin/test script. If you pass the --xml option, test reports will be written to parts/test/testreports directory:

$ bin/test --xml -s my.package --coverage-module my.package

Use bin/test --help for a full list of options.

If you are using Jenkins, you can now configure the build to publish JUnit test reports for <buildoutdir>/parts/test/testreports/*.xml and <buildoutdir>/parts/test/testreports/coverage.xml.

Tests aka develop

To run tests do:

$ virtualenv env
$ env/bin/python develop
$ env/bin/python test
Something went wrong with that request. Please try again.