Delta Reporter Reporter
wdio-delta-reporter-service ist ein Paket von Drittanbietern, weitere Informationen finden Sie auf GitHub | npm
Ein WebdriverIO Reporter-Plugin zum Erstellen von Delta-Reports
Installation
Am einfachsten ist es, @delta-reporter/wdio-delta-reporter-service
als devDependency in Ihrer package.json
zu behalten.
{
"devDependencies": {
"@delta-reporter/wdio-delta-reporter-service": "^1.1.9",
}
}
Sie können es einfach tun durch:
npm i @delta-reporter/wdio-delta-reporter-service
Configuration
Das Delta Reporter WebdriverIO-Plugin besteht aus einer Mischung aus einem WebdriverIO Service und Reporter, daher muss es in der Konfigurationsdatei sowohl als Reporter als auch als Service deklariert werden.
const DeltaReporter = require('@delta-reporter/wdio-delta-reporter-service/lib/src/reporter');
const DeltaService = require("@delta-reporter/wdio-delta-reporter-service");
let delta_config = {
enabled: true,
host: 'delta_host',
project: 'Project Name',
testType: 'Test Type'
};
exports.config = {
// ...
reporters: [
[DeltaReporter, delta_config]
],
// ...
services: [new DeltaService(delta_config)],
// ...
}
Add screenshots and videos
Screenshots können dem Bericht hinzugefügt werden, indem der Befehl sendFileToTest
im afterTest-Hook in der wdio-Konfigurationsdatei verwendet wird. Die Parameter sind type
, file
und description
:
type
: Kannimg
odervideo
seinfile
: Pfad zur hochzuladenden Dateidescription
: Optionaler Wert, der im Medien-Container in Delta Reporter angezeigt wird
Wie im obigen Beispiel gezeigt, wird bei Aufruf dieser Funktion und einem fehlgeschlagenen Test ein Screenshot-Bild an den Delta-Report angehängt.
afterTest(test) {
if (test.passed === false) {
const file_name = 'screenshot.png';
const outputFile = path.join(__dirname, file_name);
browser.saveScreenshot(outputFile);
browser.sendFileToTest('img', outputFile);
}
}
Nachfolgend ein Beispiel für alle Teile, die in der wdio-Konfigurationsdatei benötigt werden, um dieses Plugin zusammen mit Video Reporter zu verwenden, sodass Delta Reporter Screenshots und Videos von fehlgeschlagenen Tests anzeigt:
var path = require('path');
const fs = require('fs');
const video = require('wdio-video-reporter');
const DeltaReporter = require('@delta-reporter/wdio-delta-reporter-service/lib/src/reporter');
const DeltaService = require("@delta-reporter/wdio-delta-reporter-service");
// ...
function getLatestFile({ directory, extension }, callback) {
fs.readdir(directory, (_, dirlist) => {
const latest = dirlist
.map(_path => ({ stat: fs.lstatSync(path.join(directory, _path)), dir: _path }))
.filter(_path => _path.stat.isFile())
.filter(_path => (extension ? _path.dir.endsWith(`.${extension}`) : 1))
.sort((a, b) => b.stat.mtime - a.stat.mtime)
.map(_path => _path.dir);
callback(directory + '/' + latest[0]);
});
}
let delta_config = {
enabled: true,
host: 'delta_host', // put your Delta Core url here
project: 'Project Name', // Name of your project
testType: 'Test Type' // eg., End to End, E2E, Frontend Acceptance Tests
};
// ...
exports.config = {
// ...
reporters: [
[DeltaReporter, delta_config]
],
// ...
services: [new DeltaService(delta_config)],
// ...
afterTest(test) {
if (test.passed === false) {
const file_name = 'screenshot.png';
const outputFile = path.join(__dirname, file_name);
browser.saveScreenshot(outputFile);
browser.sendFileToTest('img', outputFile);
getLatestFile({ directory: browser.options.outputDir + '/_results_', extension: 'mp4' }, (filename = null) => {
browser.sendFileToTest('video', filename, 'Video captured during test execution');
});
}
}
// ...
}
Usage
Für jeden Testlauf überwacht das Delta-Plugin DELTA_LAUNCH_ID. Es gibt zwei Hauptfälle:
-
Lokaler Lauf: Sie müssen nichts tun, Sie können einfach Ihren wdio-Befehl ausführen (
./node_modules/.bin/wdio ./wdio.conf.js
) und DELTA_LAUNCH_ID wird automatisch für Sie generiert, sodass Ihre Testergebnisse in Echtzeit in Delta Reporter erscheinen. -
CI-Lauf: Wenn es sich um Ihren Testjob handelt, müssen Sie DELTA_LAUNCH_ID als Parameter definieren. Dann müssen Sie es innerhalb Ihrer Stage initialisieren, indem Sie den Endpunkt
/api/v1/launch
aufrufen und dann Ihre Tests mit vorangestelltemDELTA_LAUNCH_ID=${DELTA_LAUNCH_ID}
ausführen. Die Initialisierung erfolgt einmal, sodass bei der Ausführung mehrerer Testtypen im selben Build (z. B. UI-Tests, API-Tests, Unit-Tests) diese Tests in Delta Reporter unter einem "Launch" zusammengefasst werden.
Hier ist ein Beispielcode für eine Konfigurationsdatei für einen Jenkins-Job:
// ...
parameters {
string defaultValue: '', description: 'Launch ID sent by a pipeline, leave it blank', name: 'DELTA_LAUNCH_ID', trim: false
}
// ...
stage('Run WDIO tests') {
environment {
DELTA_LAUNCH_ID = ""
}
steps {
container('jenkins-node-worker') {
script {
try {
DELTA_LAUNCH_ID=sh(script: "curl -s --header \"Content-Type: application/json\" --request POST --data '{\"name\": \"${JOB_NAME} | ${BUILD_NUMBER} | Wdio Tests\", \"project\": \"Your project\"}' https://delta-core-url/api/v1/launch | python -c 'import sys, json; print(json.load(sys.stdin)[\"id\"])';", returnStdout: true)
} catch (Exception e) {
echo 'Couldn\'t start launch on Delta Reporter: ' + e
}
sh "DELTA_LAUNCH_ID=${DELTA_LAUNCH_ID} TEST_TYPE='Frontend Acceptance Tests' ./node_modules/.bin/wdio ./wdio.conf.js"
}
}
}
}
Sending extra data to Delta Reporter
Es ist möglich, benutzerdefinierte Daten zu senden, die in Delta Reporter mit der SmartLinks-Funktion angezeigt werden.
Verwenden Sie dazu die Befehle browser.sendDataToTest
oder sendDataToTestRun
, je nachdem, wo Sie diese Informationen anzeigen möchten.
Diese Methoden akzeptieren ein jsonifiziertes Objekt als Argument.
Beispiel für die Integration mit Spectre
beforeSuite() {
try {
let spectreTestRunURL = fs.readFileSync('./.spectre_test_run_url.json');
let test_run_payload = {
spectre_test_run_url: spectreTestRunURL.toString()
};
browser.sendDataToTestRun(test_run_payload);
} catch {
log.info('No Spectre URL found');
}
}
Dann kann in Delta Reporter ein SmartLink mit {spectre_test_run_url}
für den Testlauf erstellt werden.
Weitere Informationen zu Smart Links finden Sie in der Delta Reporter-Dokumentation