NAME
TAP::Harness::JUnit - Generate JUnit compatible output from TAP results
SYNOPSIS
use TAP::Harness::JUnit;
my $harness = TAP::Harness::JUnit->new({
xmlfile => 'output.xml',
package => 'database',
# ...
});
$harness->runtests(@tests);
DESCRIPTION
The only difference between this module and TAP::Harness is that this module adds the optional arguments 'xmlfile', 'package', and 'namemangle' that cause the output to be formatted into XML in a format similar to the one that is produced by the JUnit testing framework.
METHODS
This module inherits all functions from TAP::Harness.
new
These options are added (compared to TAP::Harness):
- xmlfile
-
Name of the file XML output will be saved to. If this argument is omitted, the default of "junit_output.xml" is used and a warning is issued.
Alternatively, the name of the output file can be specified in the $JUNIT_OUTPUT_FILE environment variable
- package
-
The Hudson/Jenkins continuous-integration systems support separating test results into "packages". By default any number of output xml files will be merged into the default package "(root)".
Setting a package name will place all test results from the current run into that package. You can also set the environment variable $JUNIT_PACKAGE to do the same.
- notimes (DEPRECATED)
-
If provided (and true), test case times will not be recorded.
- namemangle
-
Specify how to mangle testcase names. This is sometimes required to interact with buggy JUnit consumers that lack sufficient validation.
Alternatively, this value can be set in the environment variable $JUNIT_NAME_MANGLE.
Available values are:
- hudson
-
Replace anything but alphanumeric characters with underscores. This is the default for historic reasons.
- perl (RECOMMENDED)
-
Replace slashes in the directory hierarchy with dots so that the filesystem layout resembles a Java class hierarchy.
This is the recommended setting and may become the default in future.
- none
-
Do not perform any transformations.
ENVIRONMENT VARIABLES
The name of the output file can be specified in the $JUNIT_OUTPUT_FILE environment variable
The package name that Hudson/Jenkins use to categorise test results can be specified in $JUNIT_PACKAGE.
The name mangling mechanism used to rewrite test names can be specified in $JUNIT_NAME_MANGLE. (See namemangle documentation for available values.)
SEE ALSO
TAP::Formatter::JUnit at https://metacpan.org/pod/TAP::Formatter::JUnit
The JUnit XML schema was obtained from http://jra1mw.cvs.cern.ch:8180/cgi-bin/jra1mw.cgi/org.glite.testing.unit/config/JUnitXSchema.xsd?view=markup.
ACKNOWLEDGEMENTS
This module was partly inspired by Michael Peters's TAP::Harness::Archive. It was originally written by Lubomir Rintel (GoodData) <lubo.rintel@gooddata.com>
and includes code from several contributors.
The following people (in no specific order) have reported problems or contributed code to TAP::Harness::JUnit:
- David Ritter
- Jeff Lavallee
- Andreas Pohl
- Ton Voon
- Kevin Goess
- Richard Huxton
- David E. Wheeler
- Malcolm Parsons
- Finn Smith
- Toby Broyles
BUGS
The comments that are above the ok
or not ok
are considered the output of the test. This, though being more logical, is against TAP specification.
XML::Simple is used to generate the output. This is suboptimal and involves some hacks.
During testing the resulting files are not tested against the schema. This would be a good thing to do.
CONTRIBUTING
Source code for TAP::Harness::JUnit is kept in a public Git repository. Visit https://github.com/jlavallee/tap-harness-junit.
Bug reports and feature enhancement requests are tracked at https://rt.cpan.org/Public/Dist/Display.html?Name=TAP-Harness-JUnit.
COPYRIGHT & LICENSE
Copyright 2008, 2009, 2010, 2011, 2012, 2013 TAP::Harness::JUnit contributors. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.