Search code examples
javamavenjenkinsjunitjira-xray

Merging surefire JUnit reports


I have a Java project, which consists of loads of maven modules and a considerable amount of unit/integration tests. The project is configured to create test reports via the surefire plugin. Now this plugin basically creates an XML-report per test class and is scheduled to run once a day and executed on Jenkins.

What I want to do is, send the those XML-reports to a test management system (XRAY) in order to make them more visible and manageable. My (naive) approach would be to just just add a post build script on Jenkins and send those reports via curl to the test managements REST-API. This API offers a way to send a single report file at a time. This report file can either be single or nested, i.e. I can basically send both of the following and it works:

Single report

  <testsuite>
  ...
  </testsuite>

Aggregated report

  <testsuites>
    <testsuite ... />
    <testsuite ... />
  </testsuites>

The REST-API can handle both, that is the IBM JUnit schema and the standard surefire schema

Now to the problem; I obviously want to combine those reports into one to avoid having to make a billion requests to the REST-API. However I can't seem to find an automated way. What I've tried so far is

  • play around with the surefire plugin to merge the XML reports, but no appropriate option seems to exist
  • Organise Tests into a (JUnit) test suite, but the output remains an xml report per test
  • finding alternative plugins/tools that address this issue, no luck

The only other way I can think of is to write a "merge script" myself, possibly using some sort of XSLT-transformation. But I'd rather not. Any help is much appreciated, thanks!


Solution

  • The solution would be to use an external utility for that as surefire seems to not support it. I've used successfully junit-merge utility, which is an NPM package, as you can see for example in this tutorial. The usage is pretty straightforward; you just need to specify the output file and the input folder containing the multiple JUnit XML based reports.

    junit-merge  -o results.xml -d target/surefire-reports/