What is @wdio/junit-reporter?
@wdio/junit-reporter is a reporter for the WebdriverIO test runner that produces test results in JUnit XML format. This format is widely used for reporting test results in continuous integration (CI) systems.
What are @wdio/junit-reporter's main functionalities?
JUnit XML Reporting
This feature allows you to generate test results in JUnit XML format, which is useful for integrating with CI systems. The code sample demonstrates how to configure the JUnit reporter in a WebdriverIO setup.
const { remote } = require('webdriverio');
const { JUnitReporter } = require('@wdio/junit-reporter');
const wdio = remote({
logLevel: 'info',
reporters: [
[JUnitReporter, {
outputDir: './junit-results',
outputFileFormat: function(options) { // optional
return `results-${options.cid}.xml`
}
}]
]
});
(async () => {
await wdio.init();
// your test code here
await wdio.end();
})();
Custom Output File Naming
This feature allows you to customize the naming of the output files. The code sample shows how to use the `outputFileFormat` option to generate custom file names for the JUnit XML reports.
const { remote } = require('webdriverio');
const { JUnitReporter } = require('@wdio/junit-reporter');
const wdio = remote({
logLevel: 'info',
reporters: [
[JUnitReporter, {
outputDir: './junit-results',
outputFileFormat: function(options) { // optional
return `results-${options.cid}.xml`
}
}]
]
});
(async () => {
await wdio.init();
// your test code here
await wdio.end();
})();
Integration with WebdriverIO
This feature demonstrates the seamless integration of the JUnit reporter with WebdriverIO. The code sample shows a basic setup where the JUnit reporter is added to the WebdriverIO configuration.
const { remote } = require('webdriverio');
const { JUnitReporter } = require('@wdio/junit-reporter');
const wdio = remote({
logLevel: 'info',
reporters: [
[JUnitReporter, {
outputDir: './junit-results'
}]
]
});
(async () => {
await wdio.init();
// your test code here
await wdio.end();
})();
Other packages similar to @wdio/junit-reporter
mocha-junit-reporter
mocha-junit-reporter is a reporter for Mocha that generates test results in JUnit XML format. It is similar to @wdio/junit-reporter but is specifically designed for Mocha test framework. It provides similar functionalities like generating JUnit XML reports and customizing output file names.
jest-junit
jest-junit is a Jest reporter that generates test results in JUnit XML format. It is similar to @wdio/junit-reporter but is tailored for the Jest testing framework. It offers features like generating JUnit XML reports and configuring output file paths.
karma-junit-reporter
karma-junit-reporter is a reporter for the Karma test runner that produces test results in JUnit XML format. It is similar to @wdio/junit-reporter but is designed for use with the Karma test runner. It provides functionalities like generating JUnit XML reports and customizing output file names.
WebdriverIO XML Reporter
A WebdriverIO reporter that creates Jenkins compatible XML based JUnit reports
Installation
The easiest way is to keep @wdio/junit-reporter
as a devDependency in your package.json
.
{
"devDependencies": {
"@wdio/junit-reporter": "^5.0.0"
}
}
You can simple do it by:
npm install @wdio/junit-reporter --save-dev
Instructions on how to install WebdriverIO
can be found here.
Configuration
Following code shows the default wdio test runner configuration. Just add 'junit'
as reporter
to the array. To get some output during the test you can run the WDIO Dot Reporter and the WDIO JUnit Reporter at the same time:
module.exports = {
reporters: [
'dot',
['junit', {
outputDir: './',
outputFileFormat: function(opts) {
return `results-${opts.cid}.${opts.capabilities}.xml`
}
}]
],
};
The following options are supported:
outputDir
Define a directory where your xml files should get stored.
Type: String
Required
outputFileFormat
Define the xml files created after the test execution.
You can choose to have one file (single) containing all the test suites, many files (multi) or both. Default is multi.
- multi: set a function to format of your xml files using an
opts
parameter that contains the runner id as well
as the capabilities of the runner. - single: set a function to format you xml file using a
config
parameter that represents the reporter configuration
Type: Object
Default: {multi: function(opts){return `WDIO.xunit.${opts.capabilities}.${opts.cid}.xml`}}
outputFileFormat: {
single: function (config) {
return 'mycustomfilename.xml';
},
multi: function (opts) {
return `WDIO.xunit.${opts.capabilities}.${opts.cid}.xml`
}
}
suiteNameFormat
Gives the ability to provide custom regex for formatting test suite name (e.g. in output xml ).
Type: Regex
,
Default: /[^a-z0-9]+/
packageName
You can break out packages by an additional level by setting 'packageName'
. For example, if you wanted to iterate over a test suite with different environment variable set:
Type: String
Example:
module.exports = {
reporters: [
'dot',
['junit', {
outputDir: './',
packageName: process.env.USER_ROLE
}]
]
};
errorOptions
Allows to set various combinations of error notifications inside xml.
Given a Jasmine test like expect(true).toBe(false, 'my custom message')
you will get this test error:
{
matcherName: 'toBe',
message: 'Expected true to be false, \'my custom message\'.',
stack: 'Error: Expected true to be false, \'my custom message\'.\n at UserContext.it (/home/mcelotti/Workspace/WebstormProjects/forcebeatwio/test/marco/prova1.spec.js:3:22)',
passed: false,
expected: [ false, 'my custom message' ],
actual: true
}
Therefore you can choose which key will be used where, see the example below.
Type: Object
,
Default: errorOptions: { error: "message" }
Example:
module.exports = {
reporters: [
'dot',
['junit', {
outputDir: './',
errorOptions: {
error: 'message',
failure: 'message',
stacktrace: 'stack'
}
}]
],
};
Jenkins Setup
Last but not least you nead to tell your CI job (e.g. Jenkins) where it can find the xml file. To do that add a post-build action to your job that gets executed after the test has run and point Jenkins (or your desired CI system) to your XML test results:

If there is no such post-build step in your CI system there is probably a plugin for that somewhere on the internet.
For more information on WebdriverIO see the homepage.