如何在 Cypress 中合并 Junit XML 报告以与 AWS CB 集成

use*_*310 4 junit automated-tests amazon-web-services test-reporting cypress

我最初使用了 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"
    }
Run Code Online (Sandbox Code Playgroud)

索引.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",
   }
Run Code Online (Sandbox Code Playgroud)

命令行(但它不接受密码,所以我的测试全部失败)

$ yarn report --env password=<password>
Run Code Online (Sandbox Code Playgroud)

bho*_*nes 11

我专门为此目的创建了一个包。它称为junit-report-merger

您应该编写一个 Nodejs 脚本,它将使用从该包导出的函数:

合并.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')
        }
    }
)
Run Code Online (Sandbox Code Playgroud)

脚本准备好后,您应该在测试后运行它。在你的情况下,它将是这样的:

"scripts": {
    "report": "cypress run --reporter cypress-multi-reporters --reporter-options mochaFile=cypress/results/results-[hash].xml",
    "postreport": "node merge.js"
}
Run Code Online (Sandbox Code Playgroud)

更新

刚刚发布了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')
Run Code Online (Sandbox Code Playgroud)

merge.js但在 1.0.0 版本中,您可以完全避免创建并使用 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\""
  }
Run Code Online (Sandbox Code Playgroud)