Skip to content

Commit 6d4b35b

Browse files
Improved JSON Reporting
1 parent 77c8742 commit 6d4b35b

File tree

2 files changed

+65
-8
lines changed

2 files changed

+65
-8
lines changed

bin/helpers/reporterHTML.js

Lines changed: 63 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ const fs = require('fs'),
44
logger = require('./logger').winstonLogger,
55
utils = require("./utils"),
66
Constants = require('./constants'),
7-
config = require("./config");
7+
config = require("./config"),
8+
axios = require("axios");
89

910
let templatesDir = path.join(__dirname, '../', 'templates');
1011

@@ -173,7 +174,7 @@ let reportGenerator = (bsConfig, buildId, args, cb) => {
173174
});
174175
}
175176

176-
function renderReportHTML(report_data) {
177+
async function renderReportHTML(report_data) {
177178
let resultsDir = 'results';
178179
let metaCharSet = `<meta charset="utf-8">`;
179180
let metaViewPort = `<meta name="viewport" content="width=device-width, initial-scale=1"> `;
@@ -194,12 +195,17 @@ function renderReportHTML(report_data) {
194195
}
195196

196197
// Writing the JSON used in creating the HTML file.
197-
fs.writeFileSync(`${resultsDir}/browserstack-cypress-report.json`, JSON.stringify(report_data), () => {
198-
if(err) {
199-
return logger.error(err);
198+
let reportData = await cypressReportData(report_data);
199+
fs.writeFileSync(
200+
`${resultsDir}/browserstack-cypress-report.json`,
201+
JSON.stringify(reportData),
202+
() => {
203+
if (err) {
204+
return logger.error(err);
205+
}
206+
logger.info("The JSON file is saved");
200207
}
201-
logger.info("The JSON file is saved");
202-
});
208+
);
203209

204210
// Writing the HTML file generated from the JSON data.
205211
fs.writeFileSync(`${resultsDir}/browserstack-cypress-report.html`, html, () => {
@@ -210,4 +216,54 @@ function renderReportHTML(report_data) {
210216
});
211217
}
212218

219+
async function cypressReportData(report_data) {
220+
specFiles = Object.keys(report_data.rows);
221+
combinationPromises = [];
222+
for (let spec of specFiles) {
223+
let specSessions = report_data.rows[spec]["sessions"];
224+
if (specSessions.length > 0) {
225+
for (let combination of specSessions) {
226+
combinationPromises.push(generateCypressCombinationSpecReportData(combination));
227+
}
228+
}
229+
}
230+
await Promise.all(combinationPromises);
231+
return report_data;
232+
}
233+
234+
function generateCypressCombinationSpecReportData(combination){
235+
return new Promise(async (resolve, reject) => {
236+
try {
237+
let [configJsonResponse, resultsJsonResponse] = await axios.all([
238+
axios.get(combination.tests.config_json),
239+
axios.get(combination.tests.result_json)
240+
]);
241+
let tests = {};
242+
let configJson = configJsonResponse.data;
243+
let resultsJson = resultsJsonResponse.data;
244+
configJson.tests.forEach((test) => {
245+
tests[test["clientId"]] = test;
246+
});
247+
resultsJson.tests.forEach((test) => {
248+
tests[test["clientId"]] = Object.assign(
249+
tests[test["clientId"]],
250+
test
251+
);
252+
});
253+
let sessionTests = [];
254+
Object.keys(tests).forEach((testId) => {
255+
sessionTests.push({
256+
name: tests[testId]["title"].pop(),
257+
status: tests[testId]["state"],
258+
duration: parseFloat(
259+
tests[testId]["attempts"].pop()["wallClockDuration"] / 1000
260+
).toFixed(2),
261+
});
262+
});
263+
combination.tests = sessionTests;
264+
resolve(combination.tests);
265+
} catch (error) { reject(error) }
266+
})
267+
}
268+
213269
exports.reportGenerator = reportGenerator;

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
"table": "^5.4.6",
2626
"uuid": "^8.3.2",
2727
"winston": "^2.3.1",
28-
"yargs": "^14.2.3"
28+
"yargs": "^14.2.3",
29+
"axios": "^0.21.1"
2930
},
3031
"repository": {
3132
"type": "git",

0 commit comments

Comments
 (0)