Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.
Wiki Markup

This plugin makes it possible to publish the test results of an execution of a testing tool in Jenkins.


  • Records xUnit tests
  • Mark the build unstable or fail according to threshold values


Provide User XSL

For tools using a stylesheet to convert into JUnit files, you are able If you want to customise how a input report is transformed to a JUnit report, of an existing tool type; xUnit provides a way to use your own XSL if placed at Jenkins levelspecific path.
Specify your XSLs in the JENKINS_HOME/useContent userContent directory with the following convention:


For example:


Note: The tool name and the version are taken from the label in the combo box from the UI.
If the tool doesn't have a version (N/A), do not create a version directory.

Custom Tool for unsupported formats

XUnit supports a large number of report format, but not all. For unsupported report type an user could provide an own stylesheet that convert the original report into a supported JUnit report.

When choose the "Custom Tool" as tool type a path to the user XSL must be provided. The path is relative and the plugin lookup the provided relative path using the following priority:

  1. on Jenkins master
  2. on Jenkins slave
  3. relative to workspace

You could also provide an URL to the stylesheet. Is possible place the XSL file in the $JENKINS_HOME/userContent folder and automatically the file will be available under the URL http(s)://$JENKINS_URL/userContent/<xsl file>

xUnit Architecture

Global Architecture


Code Block
titleExample of pipeline
pipeline {
    agent any
    stages {
            steps {
                sh "run_tests.bash"
    post {
            xunit (
                thresholds: [ skipped(failureThreshold: '0'), failed(failureThreshold: '0') ],
                tools: [ BoostTest(pattern: 'boost/*.xml') ])


Moved to github repository page

Version 2.2.




  • JENKINS-51645 Add support for claims plugin in xUnit (nfalco79 to Arnaud)
  • JENKINS-24224 improve xunit plugin with test-stability plugin (nfalco79 to Arnaud)


  • JENKINS-53186 NUnit 2.x test cases with result Error are reported as Success (nfalco79)
  • Fix lookup strategy when user provides a custom stylesheets file to override the embedded one (nfalco79)
  • JENKINS-53034 Failure when validate NUnit 2.x reports generated by NUnit 3.x console (nfalco79)
  • JENKINS-53036 NPE after upgrade to 2.2.1 when run publisher (nfalco79)
  • JENKINS-52908 Newlines get ignored in failure message and possibly stack trace when uploading xUnitDotNet xml results (nfalco79)


  • JENKINS-52512 Builds on slave node fails when there is no report file even if set to do not fail (nfalco79)
  • JENKINS-52400 xUnit miss to add required attributes when converts Valgrind reports (nfalco79)

Version 2.0.4


  • Improved GoogleTest, FPCUnit, CppTest XSLT to produce a report more compliant with surefire XSD


  • JENKINS-52327 java.nio.file.AccessDeniedException on Publish xunit Custom tool test report (nfalco79 to greghoeppner)
  • JENKINS-52202 xUnit reports "All test reports are empty" in case of parallel steps but reports are not empty (nfalco79)
  • JENKINS-52253 xUnit in case of multiple tool type processes only the first one (nfalco79)
  • JENKINS-52173 xUnit fails when converting gtester/glib2 input to junit format (nfalco79)

Version 2.0.3


  • JENKINS-51604 XPathExeption when parsing QtTestLib Reports when a Test contains multiple Incidents (nfalco79)
  • JENKINS-27860 Build does not stop if it is marked as Failure when the opportune option is enabled (nfalco79)
  • JENKINS-47194 xUnit should not consider report generated by other xUnit step (nfalco79)
  • JENKINS-52107 Convertion exception for NUnit 2.1 reports because nunit-version attribute not contains only digits (nfalco79)

Version 2.0.2


  • JENKINS-41093 For Unittest++ xml, only the first failure of each test case is recognized (nfalco79)
  • JENKINS-51767 xUnit 2.x XSD does not validate NUnit 2.x XML report file (nfalco79)
  • JENKINS-51797 xUnit.Net v2 parse error when time attribute is missing (nfalco79)
  • JENKINS-51798 GoogleTest parse error when time attribute is missing (nfalco79)

Version 2.0.1


  • Improved GoogleTest, FPCUnit, CppTest XSLT to produce a report more compliant with surefire XSD


  • JENKINS-51561 xUnit plugin fails to parse NUnit 2 report format generated by NUnit (nfalco79)
  • JENKINS-51465 Exception in XSL Transformation cause JEP-200 (nfalco79)
  • JENKINS-51481 Parse error occur when NUnit report have categories (nfalco79)
  • JENKINS-26227 xUnit plugin doesn't use OS culture when reads time values in output (nfalco79)
  • JENKINS-12417 xUnit problems with CppTest reports generated with default options (nfalco79)
  • JENKINS-28871 CppTest 9.5 report file seems not valid for xUnit when no tests was executed (nfalco79)


In case you are using a non java tools that declares to produce a JUnit compatible report, ensure the report respects one of the widely used supported schemas. If not than select as test type the build step "Custom Tool" and provide a use this XSL as described here.

  • NUnit 2.x (2.0 ~ 2.6) schema validation from official distribution.


  • Improved MSTest, MbUnit, AUnit, NUnit, QtTest XSLT to produce a report more compliant with surefire XSD
  • Change UI rendering of the report tool and clarify the pattern description
  • JENKINS-37611 Add support for pipeline using @Symbol annotation to xunit and its parameters (nfalco79)


  • JENKINS-42715 xUnit does not support PHPUnit 5.x skipped attribute (nfalco79 to ray)
  • JENKINS-47194 xUnit should not consider report generated by other xUnit step (nfalco79)
  • JENKINS-10911 xUnit not detecting Ignored MSTest and NUnit Tests (nfalco79)
  • JENKINS-51347 Test Status "notrun" being reported as "failed" test (nfalco79)
  • JENKINS-13113 xUnit plugins detects MSTEST "NotExecuted" as successed instead of skipped (nfalco79)


  • JENKINS-33450 Support for NUnit3 which uses a different XML format by NUnit2 (nfalco79 to alexschwantes)

  • JENKINS-50658 Fix xsd to be compliant with surefire report and rerun option (nfalco79 to alemorato)
  • Move plugin to pipeline so that commits and pull request could be checked for test failure


  • JENKINS-48945 Testreport lacks of those test in which the hashcode of two different testsuite name coincide (nfalco79)
  • JENKINS-33385 Testresult doesn't show test name in case the package is empty (nfalco79 to Zenger Alexander)

  • JENKINS-51056 xUnit throws NPE when no threshold was specified (nfalco79)
  • JENKINS-35660 QTestLib time information is lost (nfalco79 to kpop)

Version 1.103


  • Move plugin to pipeline so that commits and pull request could be checked for test failure


  • JENKINS-28471 xUnit should compare test results to last build where tests was recorded to calculate correctly thresholds (nfalco79 to Jimilian)
  • JENKINS-50378 Skipped count percentage is affected by integer rounding (nfalco79 to pauljohnston2009)
  • JENKINS-42031 xUnit Plugin Does Not Parse Some Boost 1.63 Test Reports (nfalco79 to aschet)
  • Relax BoostTest code line validation (nfalco79 to penberg)

Version 1.102

  • Ensure testuite time attribute is valid for NUnit

Version 1.101

Version 1.100

  • Fix JENKINS-30812 - added parsing for gtest errors so that a failure to run a test is considered a test failure
  • Fix JENKINS-27240 - Workflow integration XUnit as a SimpleBuildStep

Version 1.99

  • Fix test calculation - Don't use previousResultStep if it is NOT_BUILT

Version 1.98

  • Fixing support for BoostTest v3 logs (Boost 1.59), support Context

Version 1.97

  • Fix JENKINS-30105 - xUnit plugin does not parse Boost Test v3 logs (Boost 1.59)

Version 1.96

  • Update to LTS 1.580.1

Version 1.95

  • Add support for gtester/glib2

Version 1.94

  • Fix Skipped Tests Threshold

Version 1.93

  • Added support for v2

Version 1.92

  • Change for ignoring 'log' and 'ignorederrors' elements for unittest tool

Version 1.91

  • Add readResolve method for compatibity with DTKit plugin

Version 1.90

  • Technical release: Migrate to dtkit-frmk 2.0.0 release (A code migration from SVN to GIT)

Version 1.89

  • Improved displayed information on parameterised googletests

Version 1.88

  • Integrate 1.85, 1.86 and 1.87 changes (resolve SNAPSHOT issue)

Version 1.87

  • Add Function element for validating boostest tool

Version 1.86

  • Fix JENKINS-13967 - Xunit don't recognize cppunit report with time execution

Version 1.85

  • Fix JENKINS-22195 - Make output format for custom tools configurable
  • Fix JENKINS-18443 - SkipNoTestFiles flag ignored. Build still set to failed if test files missing

Version 1.84

Version 1.83

Version 1.82

  • Fix reopen JENKINS-18443 - SkipNoTestFiles flag ignored. Build still set to failed if test files missing

Version 1.81

Version 1.80

  • Aggregate multiple failures in GoogleTest output to a single failure in JUnit

Version 1.79

  • Fixed MbUnit Setup + TearDown + skipped + console err + console out +AssemblySetup
  • Fix JENKINS-18443 - SkipNoTestFiles flag ignored. Build still set to failed if test files missing

Version 1.78

  • Fix JENKINS-21220 - xUnit remote file operation files - NotSerializableException

Version 1.77

  • Add support for Erlang/OTP Junit format
  • Fix JENKINS-21195 - xUnit fails with: org.jenkinsci.plugins.xunit.exception.XUnitException: Can't create /srv/jenkins/workspace... after upgrading to v1.74 from 1.48

Version 1.76

  • Fix JENKINS-18098 - xunit does not recognize failed tests anymore when there is a delay between testing and processing of test result files (because of coverage post processing in my case)

Version 1.75

  • Fix reoponed JENKINS-17438 - xunit - Custom Tool - Custom stylesheet - Global Property specified does not get resolved

Version 1.74

  • Fix performance and good practice findbugs issues and a typo

Version 1.73

  • Fix JENKINS-16131 - Conversion error with boost test and long Error information
  • Fix NullPointerException

Version 1.72

  • Fix JENKINS-17270 - Division by zero when checking xunit thresholds with empty test report

Version 1.71

Version 1.70

  • Fix JENKINS-18263 - py.test generated test reports are no longer being parsed as valid
  • Fix JENKINS-18443 - SkipNoTestFiles flag ignored. Build still set to failed if test files missing

Version 1.69

  • Fix JENKINS-18095 - nose generated xunit reports are rejected by xunit 1.59
  • Fix JENKINS-18575 - xUnit failed to parse a JUnit .xml report without any debug in log

Version 1.68

  • Enable to have xUnit plugin as a build step too.

Version 1.67

  • Add time to qtestlib tests
  • Modify custom stylesheet for getting Time node from CppUnit report

Version 1.66

  • Fix JENKINS-16259 - xUnit publisher not showing into conditional build steps

Version 1.65

Version 1.64

  • Fix JENKINS-18443 - SkipNoTestFiles flag ignored. Build still set to failed if test files missing

Version 1.63

  • Fix JENKINS-19877 - xUnit does not support symbolic link for input files

Version 1.62

Version 1.61

  • Fix reopened JENKINS-18443 - SkipNoTestFiles flag ignored. Build still set to failed if test files missing

Version 1.60

  • Add JUnit 5 which enable assertions attribute to <testsuite> element

Version 1.59

Version 1.58

Version 1.57

  • Fix JENKINS-6200 - xunit/cppunit causes exception when trying to scan a non-accessible directory

Version 1.56

  • Fix JENKINS-17877 - NullPointerException processing PHPUnit after upgrading from xunit plugin 1.54 to 1.55

Version 1.55

  • Fix JENKINS-17797 - x-unit option not to fail if there isn't a test results file

Version 1.54

  • Fix JENKINS-17438 - xunit - Custom Tool - Custom stylesheet - Global Property specified does not get resolved

Version 1.53

Version 1.52

  • Fix JENKINS-16192 - xUnit plugin is using ancient XSL transform for NUnit, misses skipped tests
  • Upgrade dependencies:
    • dtkit-metrics-parent 11
    • dtkit-junit-model 0.17
    • dtkit-metrics-parent 11
    • dtkit-metrics-default-parent 19
    • dtkit-default-junit 0.33

Version 1.51

  • Add MbUnit support

Version 1.50

  • Fix reopened JENKINS-11542 - Add support for QTestLib XML reports

Version 1.49

  • Fix JENKINS-11542 - Add support for QTestLib XML reports
  • Upgrade dependencies
    • dtkit-metrics-parent 10
    • dtkit-frmk 0.17 (fix typo for failIfFailure checkbox)
    • dtkit-plugin 0.13
    • dtkit-metrics-default-parent 18
    • dtkit-default-junit 0.32

Version 1.48

  • Fix JENKINS-14628 - Fatal error on JSON parsing
  • Fix JENKINS-15006 - Error while saving job configuration. Cannot update job configuration (1.464)

Version 1.47

  • Fix JENKINS-14517 - xUnit does not store threshold mode in config.xml

Version 1.46

  • Fix JENKINS-14052 - xUnit fails with NumberFormatException if threshold fields filled out in a certain way

Version 1.45

  • Fix JENKINS-13967 - Xunit don't recognize cppunit report with time execution

Version 1.44

  • Update to dtkit-default-junit 0.30 (Fix CppTestUnit space)

Version 1.43

  • Fix JENKINS-13036 - Boost-Test parsing (manage BuildInfo section)

Version 1.42

  • Fix JENKINS-8460 - xUnit does not parse nested <testsuite>-tags from PHPUnit

Version 1.41

  • Add threshold with percent values

Version 1.40

Version 1.39

  • Update to dtkit-default-junit 0.27 (aunit 3.x)

Version 1.38

  • Update to dtkit.default.junit.version 0.26 (Add support exception element of the aunit tool)

Version 1.37

* Fix execution with the DryRun Plugin

Version 1.36

* Fix JENKINS-12026 - xunit fails to parse boost test XML log

Version 1.35

* Fix JENKINS-12336 - Fail the build if test results were not updated this run" has no effect for JUnit

Version 1.34

* Accept test results when the number of tests is 0
* Add a JUnit type (therefore, xUnit plugin is an alternative to the JUnit archiver option)

Version 1.33

* Update to DTKit 0.24 /- fix CppUnit format check

Version 1.32

* Fix JENKINS-11908 - PHPUnit results xml fails to parse

Version 1.31

* Fix JENKINS-11858 - xUnit v1.30 fails with NullPointerException when parsing cppnit results

Version 1.30

* Add a threshold for skipped tests and failed tests

Version 1.29

* Make it compatible to the DryRun Plugin
Note: Built against Jenkins 1.410 required by the dry-run plugin.
Without the dry-run feature, the plugin is compatible to 1.409 series (LTS)

Version 1.28

* Add the ability to override embedded XSLs at Jenkins level (look above for documentation)

Version 1.27

* Fix reponed JENKINS-11552 - xUnit don't work with NUnit test since 1.25

Version 1.26.1

* Add error messages when an issue occurs

Version 1.26

* Fix reponed JENKINS-9286 - xUnit plugin cannot parse XML output with exception from boost test 1.42

Version 1.25

* Introduce Alias for the job configuration file
* Update to dtkit-default-junit 0.22 (Removed unused descriptor method)

Version 1.24

* Fix JENKINS-11344 - xUnit fails to parse boost test log

Version 1.23

* Fix JENKINS-10909 - Added support of Check tool

Version 1.22

* Fix JENKINS-10717 - xUnit boost test log processing fails on nested test suites (BOOST_AUTO_TEST_SUITE)

Version 1.20

* Fix JENKINS-10404 - UnitTest++ "time" element is ignored in results page, Duration field reported as 0ms

Version 1.19

* Fix JENKINS-9286 - xUnit plugin cannot parse XML output with exception from boost test 1.42

Version 1.18

* Update to DTKIT JUnit Format 0.16 - Added the support of skipped element

Version 1.17

* Update to DTKIT Default Junit 0.17
* Update to Jenkins 1.411 metadata

Version 1.16.2

* Fix JENKINS-9106 Custom type configuration does not pick up "Stop Processing If Error" flag

Version 1.16.1

* Fix reopen JENKINS-8843 The plugin hasn't been performed correctly: null
* Fix JENKINS-8901 The plugin hasn't been performed correctly: Unable to serialize hudson.FilePath$FileCallableWrapper@b749a3

Version 1.16

* Fix JENKINS-8843 The plugin hasn't been performed correctly: null

Version 1.15

* Fix JENKINS-6344 - fail build if any empty files exist, or provide option to do it
* Fix JENKINS-7612 - Superfluous INFO messages in console output
* Update to Jenkins 1.397 API and metadata

Version 1.14

* Fix JENKINS-8492 - NUnit test suites is not parsed correctly
* Fix JENKINS-8553 - BoostTest output coverting to JUnit format can't be recognized if contains Exceptions in boostTest result
* Fix JENKINS-8485 and JENKINS-8516
* Fix JENKINS-8787 CustomTypeDescriptor throws a RuntimeExcetion at startup
* Update to DTKIT Default Junit 0.15
* Update to DTKIT DEFAULT FRMK 0.12
* Update to DTKIT FORMAT 0.13
* Update to Jenkins 1.396 API and metadata

Version 1.13

* Update to DTKIT Default Junit 0.13
* Update to DTKIT DEFAULT FRMK 0.11

Version 1.12

* Update to DTKIT Default Junit 0.12

Version 1.11

* Update to DTKIT FRMK 0.10
* Update to DTKIT FORMAT 0.10
* Fix JENKINS-7943 - BOOST TestType hides master suites in the hierachy
* Fix JENKINS-7925 - BOOST TestType fail during validation

Version 1.10

* Update to DTKIT FRMK 0.9
* Update to DTKIT FORMAT 0.9
* Remove Guice injection on slave mode due to classloading issues.

Version 1.9

* Update to DTKIT Default Junit 0.9
* Update to DTKIT FRMK 0.8
* Fix JENKINS-7463 - BoosTest XSD enhanced
* Fix JENKINS-7323 - Can't create the report path

Version 1.8

* Update to DTKIT Default Junit 0.7
* Update to DTKIT FRMK 0.6
* Fix JENKINS-7336

Version 1.7

* Update to DTKIT Default Junit 0.6
* Update to DTKIT FRMK 0.5
* Restore the CustomType (enables users to provide a custom XSL) removed from 1.0

Version 1.6

* Update to DTKIT Default Junit 0.4 (Fixed reopened JENKINS-6951)
* Update to DTKIT FRMK 0.2

Verision 1.5

* Updated to DTKIT Default Junit 0.3 (Fixed JENKINS-6951)

Verision 1.4

* Fix the help file

Verision 1.3

* Update to DTKit 0.2 (Fixed PHPUnit xsd and xsl)
* Add the display of validation errors in the console for input and output files.

Version 1.2

  • Fix big regression issue for backward compatibility with xUnit 0.6 JENKINS-6946

Version 1.1

  • Improve deletion algorithm.

Version 1.0

  • xUnit currently follows a new model based on dtkit
  • Spelling Correction
  • Remove Embedded Cppunit plugin (Cppunit plugin extends xUnit plugin)
  • Remove Embedded Gallio plugin (Gallio plugin extends xUnit plugin)
  • Add 'Delete Temporary JUnit files' option
  • Fix JENKINS-5680 : Fixed regression introduced in 0.5.2: Added backward compatibility with a previous configuration before 0.5.2
  • Fix JENKINS-4945 : Show one graph when JUnit publisher is actived
  • Fix JENKINS-4931 : Adding a check-box option 'Fail the build if test results were not updated this run'
  • Fix some labels
  • Add the support of Free Pascal Unit
  • Remove the AUnit support.
  • AUnit (Ada test framework) is provided by the Gnat Plugin.

Note: Gnat plugin extends the xUnit plugin

  • Restore the removed feature in xUnit 0.2 : Added the ability to use a custom xUnit tool with a custom style sheet.
  • You can override the embedded stylesheet by a one at the workspace level.
  • Fix issue 4416
  • The plugin use @Extension and ExtensionPoint to allow other plugins to add a Descriptor (issue 4315)
  • [BoostTest Library] - Display the output of the macros MESSAGE,INFO and WARNING in Hudson test results
  • PHPUnit] - Fixed stylesheet
  • Fix bug on suite name content with special character
  • [BoostTest Library] - Flatten root package
  • Fix "java.lang.NoSuchMethodError: java.lang.String.isEmpty()"
  • Add the ability to work on slaves
  • Fix java.util.MissingResourceException on Linux Plateform
  • Fixed tests duration issue with Boost Test Library
  • Initial release
  • SimpleBuildSte