A JUnit XML reporter for Cypress that includes screenshots, videos, and logs on test failures.
This reporter works with Testspace to publish CI test results that include:
- Captured screenshot of a test failure
- Captured video for a suite with one or more failing tests
- Logs generated using the cypress terminal reporter
npm install cypress-xml-reporter --save-dev
Register the plugin in cypress.config.js:
module.exports = defineConfig({
video: true, // Cypress v13.x defaults to false
e2e: {
setupNodeEvents(on, config) {
require('cypress-xml-reporter/src/plugin') (on);
}
}
});
Note that Cypress v13.x defaults the video option to false. This option requires to be true to capture videos for test failures.
Run Cypress with cypress-xml-reporter:
$ cypress run --reporter cypress_xml_reporter
The generated xml files are by default located at ./results. You may optionally configure a different location by setting the environment variable RESULTS_FOLDER or specifying resultsFolder in the reporterOptions:
$ RESULTS_FOLDER=./path/location cypress run --reporter cypress_xml_reporter
Or
$ cypress run --reporter cypress_xml_reporter --reporter-options "resultsFolder=./path/location"
Or using cypress.config.js:
module.exports = defineConfig({
video: true, // Cypress v13.x defaults to false
reporter: 'cypress-xml-reporter',
reporterOptions: {
resultsFolder: './path/location'
},
e2e: {
setupNodeEvents(on, config) {
require('cypress-xml-reporter/src/plugin') (on);
}
}
});
To capture terminal output as log files the Cypress terminal report package is supported:
npm install cypress-terminal-report --save-dev
The package is required to be configured for log specs in separate files, setting the type format as txt. And pass in the defined options (i.e. logsOptions) to the reporter plugin:
setupNodeEvents(on, config) {
const logsOptions = {
outputRoot: config.projectRoot + '/cypress/',
outputTarget: {
'logs|txt': 'txt',
}
};
require('cypress-terminal-report/src/installLogsPrinter')(on, logsOptions);
require('cypress-xml-reporter/src/plugin') (on, logsOptions);
}
Note that the terminal report requires an extra installation step to register the log collector.