/corejet.testrunner

CoreJet testrunner based on zope.testrunner

Primary LanguagePython

Introduction
============

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.

It is based on (and can be used as a wholesale replacement for),
``collective.xmltestreport``.

The test runner is identical to the one in ``zope.testrunner``, except:

* 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
  Hudson/Jenkins continuous integration server.
* it can output reports in the CoreJet XML format - see `corejet.core`_

Usage
=====

In your buildout, add a part like this::

    [buildout]
    parts =
        ...
        test

    ...

    [test]
    recipe = corejet.testrunner
    eggs =
        my.package
    defaults = ['--auto-color', '--auto-progress']

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

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

To output a CoreJet report, do::

    $ bin/test --corejet="file,path/to/corejet/file.xml" -s my.package

The CoreJet report and output XML file will be placed in
``parts/test/corejet``. You can combine ``--xml`` and ``--corejet``.

The example above uses the ``file`` CoreJet repository source, which expects
to find a CoreJet XML file at the path specified after the comma.

Repository sources
==================

Other repository sources can be registered via entry points: Packages must
register an entry point under ``corejet.repositorysource`` identifying a
callable that is passed the string *after* the comma with a unique name and
which should return a ``corejet.core.model.RequirementsCatalogue`` object.

Hence, the ``file`` source is defined as::

    def fileSource(path):
        catalogue = RequirementsCatalogue()
        with open(path) as stream:
            catalogue.populate(stream)
        return catalogue

and registered with::

    [corejet.repositorysource]
    file = corejet.testrunner.filesource:fileSource

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

.. _zope.testrunner: http://pypi.python.org/pypi/zope.testrunner
.. _zc.recipe.testrunner: http://pypi.python.org/pypi/zc.recipe.testrunner
.. _corejet.core: http://pypi.python.org/pypi/corejet.core