.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "TAP::Harness::JUnit 3pm" .TH TAP::Harness::JUnit 3pm "2020-04-05" "perl v5.30.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" TAP::Harness::JUnit \- Generate JUnit compatible output from TAP results .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 7 \& use TAP::Harness::JUnit; \& my $harness = TAP::Harness::JUnit\->new({ \& xmlfile => \*(Aqoutput.xml\*(Aq, \& package => \*(Aqdatabase\*(Aq, \& # ... \& }); \& $harness\->runtests(@tests); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" The only difference between this module and \fITAP::Harness\fR is that this module adds the optional arguments 'xmlfile', 'package', and 'namemangle' that cause the output to be formatted into \s-1XML\s0 in a format similar to the one that is produced by the JUnit testing framework. .SH "METHODS" .IX Header "METHODS" This module inherits all functions from \fITAP::Harness\fR. .SS "new" .IX Subsection "new" These options are added (compared to \fITAP::Harness\fR): .IP "xmlfile" 4 .IX Item "xmlfile" Name of the file \s-1XML\s0 output will be saved to. If this argument is omitted, the default of \*(L"junit_output.xml\*(R" is used and a warning is issued. .Sp Alternatively, the name of the output file can be specified in the \&\f(CW$JUNIT_OUTPUT_FILE\fR environment variable .IP "package" 4 .IX Item "package" The Hudson/Jenkins continuous-integration systems support separating test results into \*(L"packages\*(R". By default any number of output xml files will be merged into the default package \*(L"(root)\*(R". .Sp Setting a package name will place all test results from the current run into that package. You can also set the environment variable \f(CW$JUNIT_PACKAGE\fR to do the same. .IP "notimes (\s-1DEPRECATED\s0)" 4 .IX Item "notimes (DEPRECATED)" If provided (and true), test case times will not be recorded. .IP "namemangle" 4 .IX Item "namemangle" Specify how to mangle testcase names. This is sometimes required to interact with buggy JUnit consumers that lack sufficient validation. .Sp Alternatively, this value can be set in the environment variable \&\f(CW$JUNIT_NAME_MANGLE\fR. .Sp Available values are: .RS 4 .IP "hudson" 4 .IX Item "hudson" Replace anything but alphanumeric characters with underscores. This is the default for historic reasons. .IP "perl (\s-1RECOMMENDED\s0)" 4 .IX Item "perl (RECOMMENDED)" Replace slashes in the directory hierarchy with dots so that the filesystem layout resembles a Java class hierarchy. .Sp This is the recommended setting and may become the default in future. .IP "none" 4 .IX Item "none" Do not perform any transformations. .RE .RS 4 .RE .SH "ENVIRONMENT VARIABLES" .IX Header "ENVIRONMENT VARIABLES" The name of the output file can be specified in the \f(CW$JUNIT_OUTPUT_FILE\fR environment variable .PP The package name that Hudson/Jenkins use to categorise test results can be specified in \f(CW$JUNIT_PACKAGE\fR. .PP The name mangling mechanism used to rewrite test names can be specified in \&\f(CW$JUNIT_NAME_MANGLE\fR. (See namemangle documentation for available values.) .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fITAP::Formatter::JUnit\fR at .PP The JUnit \s-1XML\s0 schema was obtained from . .SH "ACKNOWLEDGEMENTS" .IX Header "ACKNOWLEDGEMENTS" This module was partly inspired by Michael Peters's \fITAP::Harness::Archive\fR. It was originally written by Lubomir Rintel (GoodData) \&\f(CW\*(C`\*(C'\fR and includes code from several contributors. .PP The following people (in no specific order) have reported problems or contributed code to \fITAP::Harness::JUnit\fR: .IP "David Ritter" 4 .IX Item "David Ritter" .PD 0 .IP "Jeff Lavallee" 4 .IX Item "Jeff Lavallee" .IP "Andreas Pohl" 4 .IX Item "Andreas Pohl" .IP "Ton Voon" 4 .IX Item "Ton Voon" .IP "Kevin Goess" 4 .IX Item "Kevin Goess" .IP "Richard Huxton" 4 .IX Item "Richard Huxton" .IP "David E. Wheeler" 4 .IX Item "David E. Wheeler" .IP "Malcolm Parsons" 4 .IX Item "Malcolm Parsons" .IP "Finn Smith" 4 .IX Item "Finn Smith" .IP "Toby Broyles" 4 .IX Item "Toby Broyles" .PD .SH "BUGS" .IX Header "BUGS" The comments that are above the \f(CW\*(C`ok\*(C'\fR or \f(CW\*(C`not ok\*(C'\fR are considered the output of the test. This, though being more logical, is against \s-1TAP\s0 specification. .PP \&\fIXML::Simple\fR is used to generate the output. This is suboptimal and involves some hacks. .PP During testing the resulting files are not tested against the schema. This would be a good thing to do. .SH "CONTRIBUTING" .IX Header "CONTRIBUTING" Source code for \fITAP::Harness::JUnit\fR is kept in a public Git repository. Visit . .PP Bug reports and feature enhancement requests are tracked at . .SH "COPYRIGHT & LICENSE" .IX Header "COPYRIGHT & LICENSE" Copyright 2008, 2009, 2010, 2011, 2012, 2013 \fITAP::Harness::JUnit\fR contributors. All rights reserved. .PP This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.