custom-junit-report-merger
v4.0.0
Published
Merges multiple JUnit XML reports into one.
Downloads
2
Maintainers
Readme
junit-report-merger
Merges multiple JUnit XML reports into one.
Reporters of many testing frameworks generate JUnit XML reports. mocha-junit-reporter
, karma-junit-reporter
to name a few. Sometimes there is a need to combine multiple reports together in a single file. This is what junit-report-merger
does.
junit-report-merger
creates a new test results report in JUnit XML format by collecting all <testsuite>
elements from all XML reports and putting them together.
CLI
Package provides a jrm
binary, which you can use to merge multiple xml reports into one.
In a nutshell it is a tiny wrapper around mergeFiles api.
Installing
Globally
npm install -g junit-report-merger
In this case you'll be able to execute jrm
binary from within your shell.
Locally
npm install junit-report-merger --save-dev
In this case jrm
binary will be available only inside package.json
scripts:
scripts: {
"merge-reports": "jrm combined.xml \"results/*.xml\""
}
Usage
Assuming your JUnit test results are in ./results/units/
folder, and you want to get a combined test result file in ./results/combined.xml
:
jrm ./results/combined.xml "./results/units/*.xml"
You can also specify multiple glob patterns:
jrm ./results/combined.xml "./results/units/*.xml" "./results/e2e/*.xml"
NOTE
Make sure to wrap each pattern with double quotes ("
), otherwise your shell may try to expand it instead of passing to Node.js.
API
Package exports a single object with the following methods.
mergeFiles - Merges contents of multiple XML report files into a single XML report file.
mergeStreams - Merges contents of multiple XML report streams into a single XML report stream.
mergeToString - Merges multiple XML report strings into a single XML report string.
Usage
const path = require('path')
const { mergeFiles } = require('junit-report-merger')
const outputFile = path.join(__dirname, 'results', 'combined.xml')
const inputFiles = ['./results/units/*.xml', './results/e2e/*.xml']
try {
await mergeFiles(outputFile, inputFiles)
console.log('Merged, check ./results/combined.xml')
} catch (err) {
console.error(error)
}
mergeFiles
Signature:
mergeFiles(
destFilePath: string,
srcFilePathsOrGlobPatterns: string[],
options?: MergeFilesOptions
) => Promise<void>
mergeFiles(
destFilePath: string,
srcFilePathsOrGlobPatterns: string[],
options: MergeFilesOptions,
cb: (err?: Error) => void
) => void
Reads multiple files, merges their contents and write into the given file.
| Param | Type | Description |
| -------------------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| destFilePath | string | Where the output should be stored. Denotes a path to file. If file already exists, it will be overwritten. |
| srcFilePathsOrGlobPatterns | string[] | Paths to the files which should be merged. You can also specify glob patterns, such as results/**/report-*.xml
|
| [options] | MergeFilesOptions | Merge options. |
| [cb] | (err?: Error) => void | Callback function which will be called at completion. Will receive error as first argument if any. |
Last argument - cb
is a Node.js style callback function. If callback function is not passed, function will return a promise. That is, all the following variants will work:
// options passed, callback style
mergeFiles(destFilePath, srcFilePaths, {}, (err) => {})
// options missing, callback style
mergeFiles(destFilePath, srcFilePaths, (err) => {})
// options passed, promise style
await mergeFiles(destFilePath, srcFilePaths, {})
// options missing, promise style
await mergeFiles(destFilePath, srcFilePaths)
MergeFilesOptions
These are the options accepted by mergeFiles
.
Signature:
type MergeFilesOptions = {
onFileMatched? (matchInfo: {
filePath: string
}) => void
}
onFileMatched
mergeFiles
calls function specified by the onFileMatched
option once for each file matched by srcFilePaths
, right before file processing begins.
mergeStreams
Signature:
mergeStreams(
destStream: WritableStream,
srcStreams: ReadableStream[],
options?: {}
) => Promise<void>
mergeStreams(
destStream: WritableStream,
srcStreams: ReadableStream[],
options: {},
cb: (err?: Error) => void
) => void
Reads multiple streams, merges their contents and write into the given stream.
| Param | Type | Description | | ---------- | ---------------------------------- | -------------------------------------------------------------------------------------------------- | | destStream | WritableStream | A stream which will be used to write the merge result. | | srcStreams | ReadableStream[] | Streams which will be used to read data from. | | [options] | object | Merge options. Currently unused. | | [cb] | (err?: Error) => void | Callback function which will be called at completion. Will receive error as first argument if any. |
Last argument - cb
is a Node.js style callback function. If callback function is not passed, function will return a promise. That is, all the following variants will work:
// options passed, callback style
mergeStreams(destStream, srcStreams, {}, (err) => {})
// options missing, callback style
mergeStreams(destStream, srcStreams, (err) => {})
// options passed, promise style
await mergeStreams(destStream, srcStreams, {})
// options missing, promise style
await mergeStreams(destStream, srcStreams)
mergeToString
Signature:
mergeToString(
srcStrings: string[],
options?: {}
) => string
Merges given XML strings and returns the result.
| Param | Type | Description | | ---------- | --------------------- | ----------------------------------- | | srcStrings | string[] | Array of strings to merge together. | | [options] | object | Merge options. Currently unused. |
License
MIT (http://www.opensource.org/licenses/mit-license.php)