-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathindex.js
More file actions
124 lines (96 loc) · 3.25 KB
/
index.js
File metadata and controls
124 lines (96 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
let path = require("path"),
fs = require("fs"),
mkdirp = require("mkdirp");
const WdioReporter = require("@wdio/reporter").default;
const Launcher = require("@wdio/cli").default;
class BrowserStackReporter extends WdioReporter {
constructor(options) {
options = Object.assign(options);
super(options);
}
onRunnerEnd(runner) {
var sessionId = runner.sessionId;
var sepcs = runner.specs;
var specPathStringArray = sepcs[0].split("/");
var specNameWithExtension =
specPathStringArray[specPathStringArray.length - 1];
var specName = specNameWithExtension.substring(
0,
specNameWithExtension.lastIndexOf(".")
);
const xml = this.prepareXml(runner);
let filename = "REPORT-" + sessionId + ".xml";
this.write(filename, xml);
}
prepareName(name = "Skipped test") {
return name
.split(/[^a-zA-Z0-9]+/)
.filter(item => item && item.length)
.join("_");
}
prepareXml(runner) {
let thisRunner = this;
let sessionId = runner.sessionId;
let projectType = runner.capabilities && runner.capabilities.bundleID ? "APP_AUTOMATE" : "AUTOMATE";
var xmlbuilder = require("xmlbuilder");
const builder = xmlbuilder.create("testsuites", {
encoding: "UTF-8",
allowSurrogateChars: true
});
for (let keySuites of Object.keys(thisRunner.suites)) {
let suite = thisRunner.suites[keySuites];
let suiteTitle = suite.title;
let suiteFullTitle = suite.fullTitle;
const suiteNameForXML = this.prepareName(suiteTitle);
const testSuiteForXML = builder.ele("testsuite", {
name: suiteNameForXML
});
for (let keyTests of Object.keys(suite.tests)) {
let tests = suite.tests[keyTests];
let testsTitle = tests.title;
let testsFullTitle = tests.fullTitle;
const testNameForXML = this.prepareName(testsTitle);
const testCaseForXML = testSuiteForXML.ele("testcase", {
name: testNameForXML,
id: `${suiteNameForXML}.${testNameForXML}{0}`,
index: 0
});
testCaseForXML.ele("session", {}, sessionId);
testCaseForXML.ele("projectType", {}, projectType); // This variable is required in Azure plugin for App Automate
}
}
return builder.end({ pretty: true });
}
write(filename, xml) {
var outputDir = ".";
if (this.options && typeof this.options.outputDir == "string") {
outputDir = this.options.outputDir;
}
outputDir = `${outputDir}/browserstack-reports`;
try {
const dir = path.resolve(outputDir);
const filepath = path.join(dir, filename);
mkdirp.sync(dir);
fs.writeFileSync(filepath, xml);
console.log(`Wrote xunit report "${filename}" to [${outputDir}].`);
} catch (e) {
console.log(`Failed to write xunit report "${filename}"
to [${outputDir}]. Error: ${e}`);
}
}
onRunnerStart(runner) {}
onBeforeCommand(runner) {}
onAfterCommand(runner) {}
onScreenshot(runner) {}
onSuiteStart(runner) {}
onHookStart(runner) {}
onHookEnd(runner) {}
onTestStart(runner) {}
onTestPass(runner) {}
onTestFail(runner) {}
onTestSkip(runner) {}
onTestEnd(runner) {}
onSuiteEnd(runner) {}
onComplete(runner) {}
}
module.exports.default = BrowserStackReporter;