如何在 Cypress 中合并 Junit XML 报告以与 AWS CB 集成
How to merge Junit XML report in Cypress to integrate with AWS CB
我最初使用的是 Mochaawesome 报告,但无法与 AWS 集成。原来我需要 JUnit XML 记者才能与代码构建集成。
我已经创建了 Junit XML 报告,但我不知道如何将它们合并成一个 xml 文件 以便可以使用在 AWS 中。
XML 个文件已创建(我一直在尝试合并它们)
Cypress.json 文件
"reporter": "cypress-multi-reporters",
"reporterOptions": {
"reporterEnabled": "spec, mocha-junit-reporter",
"mochaJunitReporterReporterOptions": {
"mochaFile": "cypress/results/results-[hash].xml"
}
index.js 文件
"scripts": {
"delete:reports": "rm cypress/results/* || true",
"prereport": "delete:reports",
"report": "cypress run --reporter cypress-multi-reporters --reporter-options mochaFile=cypress/results/results-[hash].xml"
},
"dependencies": {
"cypress-multi-reporters": "^1.4.0",
"junit-report-merger": "^0.0.6",
"mocha": "^8.2.1",
"mocha-junit-reporter": "^2.0.0",
}
命令行(但它不接受密码所以我的测试都失败了)
$ yarn report --env password=<password>
我专门为此创建了一个包。它被称为junit-report-merger。
您应该编写一个 Nodejs 脚本,它将使用从该包导出的函数:
merge.js
const path = require('path')
const {mergeFiles} = require('junit-report-merger')
const globby = require('globby')
const inputFiles = await globby(['results/report-*.xml'])
const outputFile = path.join(__dirname, 'results', 'combined-report.xml')
mergeFiles(
outputFile,
inputFiles,
err => {
if (err) {
console.error(err)
}
else {
console.log('successfully merged')
}
}
)
脚本准备就绪后,您应该 运行 在测试后使用它。在您的情况下,它将是这样的:
"scripts": {
"report": "cypress run --reporter cypress-multi-reporters --reporter-options mochaFile=cypress/results/results-[hash].xml",
"postreport": "node merge.js"
}
更新
刚刚发布了 junit-report-merger 的 1.0.0 版,它支持 glob,允许 async/await 并提供 CLI.
上面的代码应该仍然有效,但是使用那个版本,merge.js
上面的文件可以用更短的方式编写:
const path = require('path')
const {mergeFiles} = require('junit-report-merger')
const inputPattern = ['results/report-*.xml']
const outputFile = path.join(__dirname, 'results', 'combined-report.xml')
await mergeFiles(outputFile, inputPattern)
console.log('successfully merged')
但在 1.0.0 版本中,您可以完全避免创建 merge.js
,而是使用 CLI。
像这样:
"scripts": {
"report": "cypress run --reporter cypress-multi-reporters --reporter-options mochaFile=cypress/results/results-[hash].xml",
"postreport": "jrm ./results/combined-report.xml \"./cypress/results/results-*.xml\""
}
我最初使用的是 Mochaawesome 报告,但无法与 AWS 集成。原来我需要 JUnit XML 记者才能与代码构建集成。
我已经创建了 Junit XML 报告,但我不知道如何将它们合并成一个 xml 文件 以便可以使用在 AWS 中。
XML 个文件已创建(我一直在尝试合并它们)
Cypress.json 文件
"reporter": "cypress-multi-reporters",
"reporterOptions": {
"reporterEnabled": "spec, mocha-junit-reporter",
"mochaJunitReporterReporterOptions": {
"mochaFile": "cypress/results/results-[hash].xml"
}
index.js 文件
"scripts": {
"delete:reports": "rm cypress/results/* || true",
"prereport": "delete:reports",
"report": "cypress run --reporter cypress-multi-reporters --reporter-options mochaFile=cypress/results/results-[hash].xml"
},
"dependencies": {
"cypress-multi-reporters": "^1.4.0",
"junit-report-merger": "^0.0.6",
"mocha": "^8.2.1",
"mocha-junit-reporter": "^2.0.0",
}
命令行(但它不接受密码所以我的测试都失败了)
$ yarn report --env password=<password>
我专门为此创建了一个包。它被称为junit-report-merger。
您应该编写一个 Nodejs 脚本,它将使用从该包导出的函数:
merge.js
const path = require('path')
const {mergeFiles} = require('junit-report-merger')
const globby = require('globby')
const inputFiles = await globby(['results/report-*.xml'])
const outputFile = path.join(__dirname, 'results', 'combined-report.xml')
mergeFiles(
outputFile,
inputFiles,
err => {
if (err) {
console.error(err)
}
else {
console.log('successfully merged')
}
}
)
脚本准备就绪后,您应该 运行 在测试后使用它。在您的情况下,它将是这样的:
"scripts": {
"report": "cypress run --reporter cypress-multi-reporters --reporter-options mochaFile=cypress/results/results-[hash].xml",
"postreport": "node merge.js"
}
更新
刚刚发布了 junit-report-merger 的 1.0.0 版,它支持 glob,允许 async/await 并提供 CLI.
上面的代码应该仍然有效,但是使用那个版本,merge.js
上面的文件可以用更短的方式编写:
const path = require('path')
const {mergeFiles} = require('junit-report-merger')
const inputPattern = ['results/report-*.xml']
const outputFile = path.join(__dirname, 'results', 'combined-report.xml')
await mergeFiles(outputFile, inputPattern)
console.log('successfully merged')
但在 1.0.0 版本中,您可以完全避免创建 merge.js
,而是使用 CLI。
像这样:
"scripts": {
"report": "cypress run --reporter cypress-multi-reporters --reporter-options mochaFile=cypress/results/results-[hash].xml",
"postreport": "jrm ./results/combined-report.xml \"./cypress/results/results-*.xml\""
}