gpt4 book ai didi

aggregate - Mochawesome with Cypress - 如何获得更高级别的聚合图表?

转载 作者:行者123 更新时间:2023-12-03 08:04:18 25 4
gpt4 key购买 nike

我刚刚开始将 mochawesome 与 Cypress (9.7) 一起使用。我们的测试结构基本上是许多规范文件,每个文件都遵循以下格式:

describe('(A): description of this spec', () => {
describe ('(B): description of test abc', () => {
before(() => {
// do specific set up bits for this test
})
it('(C): runs test abc', () => {
// do actual test stuff
})
})
})

每个规范文件中都有一个“A”描述 block ,但可以有许多“B”级 block (每个 block 都有一个“C”) - 这样做是因为每个“C”的前 block ' 总是不同的 - 我无法使用 beforeEach。

当我运行各种规范文件时,每个规范文件的结构都与上面类似,mochaewsome 输出大部分是正确的 - 我在“A”级别为每个规范文件获得一个可折叠 block ,每个文件在 B 级都有多个可折叠 block ,每个测试信息符合 C 级预期。

但是......圆形图表仅在B级显示。我希望的是,可能有A级的聚合图表,以及所有A级区 block 的进一步聚合图表。

不确定我是否已经很好地解释了这一点(!),但希望有人理解,并可以提供建议?!

最佳答案

cypress-mochawesome-reporter中,有一个使用on('after:run')的替代设置可以执行聚合。

Cypress v9.7.0

// cypress/plugins/index.js

const { beforeRunHook, afterRunHook } = require('cypress-mochawesome-reporter/lib');
const { aggregateResults } = require('./aggregate-mochawesome-report-chart');

module.exports = (on, config) => {
on('before:run', async (details) => {
await beforeRunHook(details);
});

on('after:run', async () => {
aggregateResults(config)
await afterRunHook();
});
};

Cypress v10+

// cypress.config.js

const { defineConfig } = require('cypress');
const { beforeRunHook, afterRunHook } = require('cypress-mochawesome-reporter/lib');
const { aggregateResults } = require('./aggregate-mochawesome-report-chart');

module.exports = defineConfig({
reporter: 'cypress-mochawesome-reporter',
video: false,
retries: 1,
reporterOptions: {
reportDir: 'test-report',
charts: true,
reportPageTitle: 'custom-title',
embeddedScreenshots: true,
inlineAssets: false,
saveAllAttempts: false,
saveJson: true
},
e2e: {
setupNodeEvents(on, config) {
on('before:run', async (details) => {
await beforeRunHook(details);
});

on('after:run', async () => {
aggregateResults(config)
await afterRunHook();
});
},
},
});

进行聚合的模块是

// aggregate-mochawesome-reporter-chart.js

const path = require('path');
const fs = require('fs-extra')

function aggregateResults(config) {
const jsonPath = path.join(config.reporterOptions.reportDir , '/.jsons', '\mochawesome.json');
const report = fs.readJsonSync(jsonPath)
const topSuite = report.results[0].suites[0]
aggregate(topSuite)
fs.writeJsonSync(jsonPath, report)
}
function aggregate(suite, level = 0) {
const childSuites = suite.suites.map(child => aggregate(child, ++level))
suite.passes = suite.passes.concat(childSuites.map(child => child.passes)).flat()
suite.failures = suite.failures.concat(childSuites.map(child => child.failures)).flat()
suite.pending = suite.pending.concat(childSuites.map(child => child.pending)).flat()
suite.skipped = suite.skipped.concat(childSuites.map(child => child.skipped)).flat()
if (!suite.tests.length && suite.suites[0].tests.length) {
// trigger chart when to describe has no tests
suite.tests = [
{
"title": "Aggregate of tests",
"duration": 20,
"pass": true,
"context": null,
"err": {},
"uuid": "0",
"parentUUID": suite.uuid,
},
]
}
return suite
}

module.exports = {
aggregateResults
}

函数aggregate()递归地循环遍历子套件并将测试结果添加到父套件。

json 文件

请注意,json 文件在 afterRunHook 运行时和测试运行结束时是不同的。

如果您设置了 saveJson: true 选项,您将在报告目录中获得一个名为 index.json 的最终 json 文件。

在 afterRunHook 阶段,文件为 mochawesome.json

聚合前

聚合后

关于aggregate - Mochawesome with Cypress - 如何获得更高级别的聚合图表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72907573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com