@gmangiapelo/wdio-azure-devops-service
Version:
Wdio Service to inject result of automatic test run in Azure DevOps TestPlan
79 lines (78 loc) • 2.7 kB
JavaScript
import { AzureTestPlanReporter } from '@gmangiapelo/azuredevops-test-reporter';
export default class AzureDevopsService {
_options;
_azureReporter;
constructor(_options) {
this._options = _options;
_options = Object.assign(_options, { stdout: true });
this._azureReporter = new AzureTestPlanReporter(this._options);
}
async onPrepare() {
await this._azureReporter.init();
await this._azureReporter.starTestRun();
}
async onComplete() {
await this._azureReporter.stopTestRun();
}
async afterTest(test, context, result) {
let caseId = this.parseCaseIDString(test.parent);
if (caseId == 'notDefined') {
caseId = this.parseCaseIDString(test.title);
if (caseId == 'notDefined') {
return new Promise((resolve) => {
resolve();
});
}
}
const testResult = {
testCaseId: caseId,
result: result.passed ? 'Passed' : 'Failed',
message: '', // pass a substring of result.error
};
await this._azureReporter.init();
const runId = await this._azureReporter.getCurrentTestRunId();
await this._azureReporter.sendTestResult(testResult, runId);
}
async afterScenario(world, result) {
const caseId = this.parseCaseID(world.pickle.tags);
if (caseId == 'notDefined') {
return new Promise((resolve) => {
resolve();
});
}
const testResult = {
testCaseId: caseId,
result: result.passed ? 'Passed' : 'Failed',
message: result.error || '',
};
await this._azureReporter.init();
const runId = await this._azureReporter.getCurrentTestRunId();
await this._azureReporter.sendTestResult(testResult, runId);
}
parseCaseID(pickleTags) {
const caseID = 'notDefined';
let patt = /@?[cC](\d+)/g;
if (this._options.caseIdRegex) {
patt = new RegExp(this._options.caseIdRegex, 'g');
}
for (const tag of pickleTags) {
const matchInfo = patt.exec(tag.name);
if (matchInfo != null) {
return matchInfo[1];
}
}
return caseID;
}
parseCaseIDString(title) {
const caseID = 'notDefined';
let patt = /@?[cC](\d+)/g;
if (this._options.caseIdRegex) {
patt = new RegExp(this._options.caseIdRegex, 'g');
}
const matchInfo = patt.exec(title);
if (matchInfo != null) {
return matchInfo[1];
}
return caseID;
}
}