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

Supported tools

Embedded tools

* JUnit itself(supported schema are Ant junit and Maven Surefire)
* AUnit
* MSTest (imported from MSTest Plugin)
* NUnit (imported from NUnit Plugin)
* UnitTest++
* Boost Test Library
* PHPUnit
* Free Pascal Unit
* CppUnit
* MbUnit
* Googletest
* EmbUnit
* gtester/glib


* Execute your testing tools manually or as a step of your build chain
* Give a pattern that specifies your test results

Showing the details:

Manage Jenkins > System Log > Add new log recorder.

Give a name as 'xUnit Logger' and add the following logger:

  • "XUnitService" for a severity as 'all'

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


For example, creating a boost pipeline (declarative) with the same configuration as above would be:

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') ]











Version 2.0.0




Moved to github repository page

Version 2.2.5


  • 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)

Version 2.1.0


  • JENKINS-32920 Support for URL for stylesheet in Custom Tool (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)
  • 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)
  • 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)
  • 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)

Version 2.0.0

Breaking Changes

I have introduce some schemas validation becase the large number of issues opened to xUnit plugin. Those issues are caused by custom attributes or XML DOM in the report generated by some user/tools report logger also if they declare to produce a valid report file. This cause me to spend a lot of time to investigate what is right and what is wrong and how to implement the XSL without it goes in error during transformation. 

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 use this XSL as described here.

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

In case you are using a tools that declares to produce a NUnit 2 compatible report, ensure the report respects the official schemas. If not than select as test type the build step "Custom Tool" and provide a XSL as described here.


  • 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)

Version 1.104


  • 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.21 (technical release)

* Remove unused transitive dependencies

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

Version 0.6.1

* Spelling Correction

Version 0.6

* Remove Embedded Cppunit plugin (Cppunit plugin extends xUnit plugin)
* Remove Embedded Gallio plugin (Gallio plugin extends xUnit plugin)

Version 0.5.3

* 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

Version 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'

Version 0.5.1

* Fix some labels

Version 0.5

* Add the support of Free Pascal Unit

Version 0.4

* Remove the AUnit support.
AUnit (Ada test framework) is provided by the Gnat Plugin.
Note: Gnat plugin extends the xUnit plugin

Version 0.3.1

* 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.

Version 0.3

* Fix issue 4416

Version 0.2

* 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

Version 0.1.3

* [BoostTest Library] - Flatten root package

Version 0.1.2

* Fix "java.lang.NoSuchMethodError: java.lang.String.isEmpty()"
* Add the ability to work on slaves

Version 0.1.1

  • Fix java.util.MissingResourceException on Linux Plateform
  • Fixed tests duration issue with Boost Test Library

Version 0.1

  • Initial release
  • SimpleBuildSte