2

我最初使用 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>
4

1 回答 1

6

我专门为此目的创建了一个包。它被称为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')
        }
    }
)

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

"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\""
  }
于 2020-11-25T06:39:52.673 回答