Allure Reporter
Un plugin reporter di WebdriverIO per creare Rapporti di Test Allure.

Installazione
Il modo più semplice è includere @wdio/allure-reporter come devDependency nel tuo package.json.
{
  "devDependencies": {
    "@wdio/allure-reporter": "^7.0.0"
  }
}
Puoi farlo semplicemente con:
npm install @wdio/allure-reporter --save-dev
Configurazione
Configura la directory di output nel tuo file wdio.conf.js:
export const config = {
    // ...
    reporters: [['allure', {
        outputDir: 'allure-results',
        disableWebdriverStepsReporting: true,
        disableWebdriverScreenshotsReporting: true,
    }]],
    // ...
}
outputDirè impostato di default su./allure-results. Dopo l'esecuzione di un test, troverai questa directory popolata con un file.xmlper ogni spec, più una serie di file.txte.pnge altri allegati.disableWebdriverStepsReporting- parametro opzionale (falsedi default), per registrare solo i passaggi personalizzati nel reporter.issueLinkTemplate- parametro opzionale, per specificare il modello di link per i problemi. Il reporter sostituirà il segnaposto{}con il valore specificato nella chiamataaddIssue(value). La stessa logica viene applicata se si utilizza Cucumber e il tagissueè impostato a qualsiasi livello, sarà convertito in un link nel report. Esempio di valore del parametro:https://example.org/issue/{}tmsLinkTemplate- parametro opzionale, per specificare il modello di link TMS (Test Management System). Il reporter sostituirà il segnaposto{}con il valore specificato nella chiamataaddTestId(value). La stessa logica viene applicata se si utilizza Cucumber e il tagtestIdè impostato a qualsiasi livello, sarà convertito in un link nel report. Esempio di valore del parametro:https://example.org/tms/{}disableWebdriverScreenshotsReporting- parametro opzionale (falsedi default), per non allegare screenshot al reporter.useCucumberStepReporter- parametro opzionale (falsedi default), impostalo a true per modificare la gerarchia del report quando si utilizza cucumber. Provalo e vedi come appare.disableMochaHooks- parametro opzionale (falsedi default), impostalo a true per non recuperare gli hookbefore/afterstacktrace/screenshot/result nel Reporter Allure.addConsoleLogs- parametro opzionale (falsedi default), impostalo a true per allegare i log della console dal passaggio al reporter.reportedEnvironmentVars(tipo:Record<string, string>) - Imposta questa opzione per visualizzare le variabili d'ambiente nel report. Nota che questa impostazione non modifica le variabili d'ambiente effettive.
API Allure supportate
addLabel(name, value)- assegna un'etichetta personalizzata al testaddFeature(featureName)– assegna funzionalità al testaddStory(storyName)– assegna una user story al testaddSeverity(value)– assegna la gravità al test, accetta uno di questi valori: blocker, critical, normal, minor, trivialaddTag(value)– assegna un'etichetta tag al testaddEpic(value)– assegna un'etichetta epic al testaddOwner(value)– assegna un'etichetta proprietario al testaddSuite(value)– assegna un'etichetta suite al testaddSubSuite(value)– assegna un'etichetta sub suite al testaddParentSuite(value)– assegna un'etichetta parent suite al testaddIssue(value)– assegna un ID problema al testaddAllureId(value)– assegna un'etichetta ID test ops Allure al testaddTestId(value)– assegna un ID test TMS al test- ~~
addEnvironment(name, value)~~ – una funzione deprecata che non funziona più. UsareportedEnvironmentVarsinvece addAttachment(name, content, [type])– salva un allegato al test.name(String) - nome dell'allegato.content– contenuto dell'allegato.type(String, opzionale) – MIME-type dell'allegato,text/plaindi default
addArgument(name, value)- aggiunge un argomento aggiuntivo al testaddDescription(description, [type])– aggiunge una descrizione al test.description(String) - descrizione del test.type(String, opzionale) – tipo di descrizione,textdi default. Valori ['text', 'html','markdown']
addStep(title, [{content, name = 'attachment'}], [status])- aggiunge un passaggio al test.title(String) - nome del passaggio.content(String, opzionale) - allegato del passaggioname(String, opzionale) - nome dell'allegato al passaggio,attachmentdi default.status(String, opzionale) - stato del passaggio,passeddi default. Deve essere "failed", "passed" o "broken"
startStep(title)- inizia con un passaggiotitle(String) - nome del passaggio.
endStep(status)- termina con un passaggiostatus(String, opzionale) - stato del passaggio,passeddi default. Deve essere "failed", "passed" o "broken"
step(name, body)- inizia il passaggio con la funzione di contenuto all'interno. Permette di creare passaggi con gerarchia infinitabody(Function) - la funzione asincrona del corpo del passaggio
Utilizzo
Si può accedere all'API Allure usando:
CJS
const allureReporter = require('@wdio/allure-reporter').default
ESM
import allureReporter from '@wdio/allure-reporter'
Esempio Mocha
describe('Suite', () => {
    it('Case', () => {
        allureReporter.addFeature('Feature')
    })
})
Cucumber
Esempio base di Cucumber:
Given('I include feature and story name', () => {
    allureReporter.addFeature('Feature_name');
    allureReporter.addStory('Story_name');
})
Passaggi personalizzati
Il metodo step semplifica la gestione dei passaggi perché ogni passaggio si presenta come una funzione asincrona con qualsiasi contenuto all'interno.
Il primo argomento della funzione è il passaggio corrente, che ha la maggior parte dei metodi API di allure (come label, epic, attach ecc):
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
    })
})
Tag Cucumber
I tag Cucumber con nomi speciali (issue e testId) vengono convertiti in link (i modelli di link corrispondenti devono essere configurati in precedenza):
@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
I tag Cucumber con nomi speciali (feature) sono mappati alle etichette Allure:
Feature: Test user role
  @feature=login
  Scenario: Login
    Given I test login
Visualizzazione del report
I risultati possono essere utilizzati da qualsiasi strumento di reporting offerto da Allure. Per esempio:
Linea di comando
Installa lo strumento a linea di comando Allure e processa la directory dei risultati:
allure generate [allure_output_dir] && allure open
Questo genererà un report (per default in ./allure-report) e lo aprirà nel tuo browser.
Generazione automatica del report
Puoi anche generare automaticamente il report utilizzando lo strumento a linea di comando Allure in modo programmatico. Per farlo installa il pacchetto nel tuo progetto con:
npm i allure-commandline
Quindi aggiungi o estendi il tuo hook onComplete o crea un servizio personalizzato per questo:
// 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
Installa e configura il plugin Jenkins Allure
Aggiungere Screenshot
Gli screenshot possono essere allegati al report utilizzando la funzione takeScreenshot di WebDriverIO nell'hook afterTest per Mocha e Jasmine o nell'hook afterStep per Cucumber.
Prima imposta disableWebdriverScreenshotsReporting: false nelle opzioni del reporter, poi aggiungi nell'hook afterStep:
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();
  }
}
Come mostrato nell'esempio sopra, quando questa funzione viene chiamata, un'immagine screenshot sarà allegata al report Allure.