Allure Reporter
Ein WebdriverIO Reporter-Plugin zum Erstellen von Allure Test Reports.
Installation
Der einfachste Weg ist, @wdio/allure-reporter
als devDependency in Ihre package.json
aufzunehmen.
{
"devDependencies": {
"@wdio/allure-reporter": "^7.0.0"
}
}
Sie können dies einfach tun mit:
npm install @wdio/allure-reporter --save-dev
Konfiguration
Konfigurieren Sie das Ausgabeverzeichnis in Ihrer wdio.conf.js-Datei:
export const config = {
// ...
reporters: [['allure', {
outputDir: 'allure-results',
disableWebdriverStepsReporting: true,
disableWebdriverScreenshotsReporting: true,
}]],
// ...
}
outputDir
ist standardmäßig./allure-results
. Nach Abschluss eines Testlaufs werden Sie feststellen, dass dieses Verzeichnis mit einer.xml
-Datei für jede Spezifikation sowie einer Reihe von.txt
- und.png
-Dateien und anderen Anhängen gefüllt wurde.disableWebdriverStepsReporting
- optionaler Parameter (standardmäßigfalse
), um nur benutzerdefinierte Schritte für den Reporter zu protokollieren.issueLinkTemplate
- optionaler Parameter, um das Issue-Link-Muster anzugeben. Der Reporter ersetzt den Platzhalter{}
durch den Wert, der im AufrufparameteraddIssue(value)
angegeben wurde. Die gleiche Logik wird angewendet, wenn Cucumber verwendet wird und das Tagissue
auf beliebiger Ebene gesetzt ist, es wird im Bericht in einen Link umgewandelt. Beispiel für den Parameterwert:https://example.org/issue/{}
tmsLinkTemplate
- optionaler Parameter, um das TMS (Test Management System) Link-Muster anzugeben. Der Reporter ersetzt den Platzhalter{}
durch den Wert, der im AufrufparameteraddTestId(value)
angegeben wurde. Die gleiche Logik wird angewendet, wenn Cucumber verwendet wird und das TagtestId
auf beliebiger Ebene gesetzt ist, es wird im Bericht in einen Link umgewandelt. Beispiel für den Parameterwert:https://example.org/tms/{}
disableWebdriverScreenshotsReporting
- optionaler Parameter (standardmäßigfalse
), um keine Screenshots an den Reporter anzuhängen.useCucumberStepReporter
- optionaler Parameter (standardmäßigfalse
), auftrue
setzen, um die Berichtshierarchie bei Verwendung von Cucumber zu ändern. Probieren Sie es selbst aus und sehen Sie, wie es aussieht.disableMochaHooks
- optionaler Parameter (standardmäßigfalse
), auftrue
setzen, um diebefore/after
Stacktrace/Screenshot/Result-Hooks nicht in den Allure Reporter einzubinden.addConsoleLogs
- optionaler Parameter (standardmäßigfalse
), auftrue
setzen, um Konsolenprotokolle vom Schritt an den Reporter anzuhängen.reportedEnvironmentVars
(Typ:Record<string, string>
) - Setzen Sie diese Option, um die Umgebungsvariablen im Bericht anzuzeigen. Beachten Sie, dass das Setzen dieser Option die tatsächlichen Umgebungsvariablen nicht ändert.
Unterstützte Allure API
addLabel(name, value)
- weist einem Test ein benutzerdefiniertes Label zuaddFeature(featureName)
– weist einem Test Features zuaddStory(storyName)
– weist einem Test eine User Story zuaddSeverity(value)
– weist einem Test einen Schweregrad zu, akzeptiert einen dieser Werte: blocker, critical, normal, minor, trivialaddTag(value)
– weist einem Test ein Tag-Label zuaddEpic(value)
– weist einem Test ein Epic-Label zuaddOwner(value)
– weist einem Test ein Owner-Label zuaddSuite(value)
– weist einem Test ein Suite-Label zuaddSubSuite(value)
– weist einem Test ein Untersuite-Label zuaddParentSuite(value)
– weist einem Test ein übergeordnetes Suite-Label zuaddIssue(value)
– weist einem Test eine Issue-ID zuaddAllureId(value)
– weist einem Test eine Allure Test Ops ID zuaddTestId(value)
– weist einem Test eine TMS-Test-ID zu- ~~
addEnvironment(name, value)
~~ – eine veraltete Funktion, die nicht mehr funktioniert. Verwenden Sie stattdessenreportedEnvironmentVars
addAttachment(name, content, [type])
– speichert einen Anhang zum Test.name
(String) - Name des Anhangs.content
– Inhalt des Anhangs.type
(String, optional) – MIME-Typ des Anhangs, standardmäßigtext/plain
addArgument(name, value)
- fügt einem Test ein zusätzliches Argument hinzuaddDescription(description, [type])
– fügt einem Test eine Beschreibung hinzu.description
(String) - Beschreibung des Tests.type
(String, optional) – Beschreibungstyp, standardmäßigtext
. Werte ['text', 'html','markdown']
addStep(title, [{content, name = 'attachment'}], [status])
- fügt einem Test einen Schritt hinzu.title
(String) - Name des Schritts.content
(String, optional) - Schrittanhangname
(String, optional) - Name des Schrittanhangs, standardmäßigattachment
.status
(String, optional) - Schrittstatus, standardmäßigpassed
. Muss "failed", "passed" oder "broken" sein
startStep(title)
- beginnt mit einem Schritttitle
(String) - Name des Schritts.
endStep(status)
- beendet einen Schrittstatus
(String, optional) - Schrittstatus, standardmäßigpassed
. Muss "failed", "passed" oder "broken" sein
step(name, body)
- beginnt einen Schritt mit einer Inhaltsfunktion. Ermöglicht das Erstellen von Schritten mit unendlicher Hierarchiebody
(Function) - die asynchrone Funktion des Schrittkörpers
Verwendung
Auf die Allure API kann wie folgt zugegriffen werden:
CJS
const allureReporter = require('@wdio/allure-reporter').default
ESM
import allureReporter from '@wdio/allure-reporter'
Mocha-Beispiel
describe('Suite', () => {
it('Case', () => {
allureReporter.addFeature('Feature')
})
})
Cucumber
Einfaches Cucumber-Beispiel:
Given('I include feature and story name', () => {
allureReporter.addFeature('Feature_name');
allureReporter.addStory('Story_name');
})
Benutzerdefinierte Schritte
Die Methode step
vereinfacht den Umgang mit Schritten, da jeder Schritt als asynchrone Funktion mit beliebigem Inhalt präsentiert wird.
Das erste Argument der Funktion ist der aktuelle Schritt, der die meisten Allure-API-Methoden (wie label
, epic
, attach
usw.) enthält:
allureReporter.step('my step name', async (s1) => {
s1.label('foo', 'bar')
await s1.step('my child step name', async (s2) => {
// you can add any combination of steps in the body function
})
})
Cucumber-Tags
Cucumber-Tags mit speziellen Namen (issue
und testId
) werden in Links umgewandelt (die entsprechenden Link-Vorlagen müssen vorher konfiguriert werden):
@issue=BUG-1
@testId=TST-2
Feature: This is a feature with global tags that will be converted to Allure links
@issue=BUG-3
@testId=TST-4
Scenario: This is a scenario with tags that will be converted to Allure links
Given I do something
Cucumber-Tags mit speziellen Namen (feature
) werden auf Allure-Labels abgebildet:
Feature: Test user role
@feature=login
Scenario: Login
Given I test login
Anzeigen des Berichts
Die Ergebnisse können von jedem der von Allure angebotenen Reporting-Tools verwendet werden. Zum Beispiel:
Kommandozeile
Installieren Sie das Allure-Kommandozeilentool und verarbeiten Sie das Ergebnisverzeichnis:
allure generate [allure_output_dir] && allure open
Dies generiert einen Bericht (standardmäßig in ./allure-report
) und öffnet ihn in Ihrem Browser.
Automatische Berichtsgenerierung
Sie können den Bericht auch automatisch erstellen, indem Sie das Allure-Kommandozeilentool programmgesteuert verwenden. Installieren Sie dazu das Paket in Ihrem Projekt mit:
npm i allure-commandline
Fügen Sie dann Ihren onComplete
-Hook hinzu oder erweitern Sie ihn, oder erstellen Sie einen benutzerdefinierten Service dafür:
// wdio.conf.js
const allure = require('allure-commandline')
export const config = {
// ...
onComplete: function() {
const reportError = new Error('Could not generate Allure report')
const generation = allure(['generate', 'allure-results', '--clean'])
return new Promise((resolve, reject) => {
const generationTimeout = setTimeout(
() => reject(reportError),
5000)
generation.on('exit', function(exitCode) {
clearTimeout(generationTimeout)
if (exitCode !== 0) {
return reject(reportError)
}
console.log('Allure report successfully generated')
resolve()
})
})
}
// ...
}
Jenkins
Installieren und konfigurieren Sie das Allure Jenkins-Plugin
Screenshots hinzufügen
Screenshots können dem Bericht hinzugefügt werden, indem die Funktion takeScreenshot
von WebDriverIO im afterTest
-Hook für Mocha und Jasmine oder im afterStep
-Hook für Cucumber verwendet wird.
Setzen Sie zuerst disableWebdriverScreenshotsReporting: false
in den Reporter-Optionen und fügen Sie dann im afterStep-Hook hinzu:
Mocha / Jasmine
afterTest: async function(test, context, { error, result, duration, passed, retries }) {
if (error) {
await browser.takeScreenshot();
}
}
Cucumber
afterStep: async function (step, scenario, { error, duration, passed }, context) {
if (error) {
await browser.takeScreenshot();
}
}
Wie im obigen Beispiel gezeigt, wird bei Aufruf dieser Funktion ein Screenshot-Bild an den Allure-Bericht angehängt.