Rapporteur Allure
Un plugin de rapporteur WebdriverIO pour créer des Rapports de Test Allure.
Installation
La façon la plus simple est d'inclure @wdio/allure-reporter
comme devDependency dans votre package.json
.
{
"devDependencies": {
"@wdio/allure-reporter": "^7.0.0"
}
}
Vous pouvez simplement le faire par :
npm install @wdio/allure-reporter --save-dev
Configuration
Configurez le répertoire de sortie dans votre fichier wdio.conf.js :
export const config = {
// ...
reporters: [['allure', {
outputDir: 'allure-results',
disableWebdriverStepsReporting: true,
disableWebdriverScreenshotsReporting: true,
}]],
// ...
}
outputDir
est par défaut./allure-results
. Après l'exécution d'un test, vous trouverez ce répertoire rempli d'un fichier.xml
pour chaque spécification, ainsi que plusieurs fichiers.txt
et.png
et d'autres pièces jointes.disableWebdriverStepsReporting
- paramètre optionnel (false
par défaut), afin de n'enregistrer que les étapes personnalisées dans le rapporteur.issueLinkTemplate
- paramètre optionnel, afin de spécifier le modèle de lien d'issue. Le rapporteur remplacera le caractère de remplacement{}
par la valeur spécifiée dans le paramètre d'appeladdIssue(value)
. La même logique est appliquée si Cucumber est utilisé et que le tagissue
est défini à n'importe quel niveau, il sera converti en lien dans le rapport. Exemple de valeur du paramètre :https://example.org/issue/{}
tmsLinkTemplate
- paramètre optionnel, afin de spécifier le modèle de lien TMS (Test Management System). Le rapporteur remplacera le caractère de remplacement{}
par la valeur spécifiée dans le paramètre d'appeladdTestId(value)
. La même logique est appliquée si Cucumber est utilisé et que le tagtestId
est défini à n'importe quel niveau, il sera converti en lien dans le rapport. Exemple de valeur du paramètre :https://example.org/tms/{}
disableWebdriverScreenshotsReporting
- paramètre optionnel (false
par défaut), afin de ne pas joindre les captures d'écran au rapporteur.useCucumberStepReporter
- paramètre optionnel (false
par défaut), définissez-le sur true pour modifier la hiérarchie des rapports lors de l'utilisation de cucumber. Essayez-le vous-même pour voir comment cela se présente.disableMochaHooks
- paramètre optionnel (false
par défaut), définissez-le sur true pour ne pas récupérer les hooks de trace/capture d'écran/résultatbefore/after
dans le Rapporteur Allure.addConsoleLogs
- paramètre optionnel (false
par défaut), définissez-le sur true pour joindre les logs de console de l'étape au rapporteur.reportedEnvironmentVars
(type:Record<string, string>
) - Définissez cette option pour afficher les variables d'environnement dans le rapport. Notez que cette configuration ne modifie pas les variables d'environnement réelles.
API Allure supportée
addLabel(name, value)
- attribuer une étiquette personnalisée au testaddFeature(featureName)
– attribuer des fonctionnalités au testaddStory(storyName)
– attribuer une user story au testaddSeverity(value)
– attribuer une sévérité au test, accepte l'une des valeurs suivantes : blocker, critical, normal, minor, trivialaddTag(value)
– attribuer une étiquette de tag au testaddEpic(value)
– attribuer une étiquette d'épopée au testaddOwner(value)
– attribuer une étiquette de propriétaire au testaddSuite(value)
– attribuer une étiquette de suite au testaddSubSuite(value)
– attribuer une étiquette de sous-suite au testaddParentSuite(value)
– attribuer une étiquette de suite parente au testaddIssue(value)
– attribuer un identifiant de problème au testaddAllureId(value)
– attribuer une étiquette d'identifiant de test Allure au testaddTestId(value)
– attribuer un identifiant de test TMS au test- ~~
addEnvironment(name, value)
~~ – une fonction obsolète qui ne fonctionne plus. UtilisezreportedEnvironmentVars
à la place addAttachment(name, content, [type])
– enregistrer une pièce jointe au test.name
(String) - nom de la pièce jointe.content
– contenu de la pièce jointe.type
(String, optionnel) – type MIME de la pièce jointe,text/plain
par défaut
addArgument(name, value)
- ajouter un argument supplémentaire au testaddDescription(description, [type])
– ajouter une description au test.description
(String) - description du test.type
(String, optionnel) – type de description,text
par défaut. Valeurs ['text', 'html','markdown']
addStep(title, [{content, name = 'attachment'}], [status])
- ajouter une étape au test.title
(String) - nom de l'étape.content
(String, optionnel) - pièce jointe de l'étapename
(String, optionnel) - nom de la pièce jointe de l'étape,attachment
par défaut.status
(String, optionnel) - statut de l'étape,passed
par défaut. Doit être "failed", "passed" ou "broken"
startStep(title)
- commencer avec une étapetitle
(String) - nom de l'étape.
endStep(status)
- terminer avec une étapestatus
(String, optionnel) - statut de l'étape,passed
par défaut. Doit être "failed", "passed" ou "broken"
step(name, body)
- commence l'étape avec une fonction de contenu à l'intérieur. Permet de créer des étapes avec une hiérarchie infiniebody
(Function) - la fonction async du corps de l'étape
Utilisation
L'API Allure peut être accédée en utilisant :
CJS
const allureReporter = require('@wdio/allure-reporter').default
ESM
import allureReporter from '@wdio/allure-reporter'
Exemple Mocha
describe('Suite', () => {
it('Case', () => {
allureReporter.addFeature('Feature')
})
})
Cucumber
Exemple de base Cucumber :
Given('I include feature and story name', () => {
allureReporter.addFeature('Feature_name');
allureReporter.addStory('Story_name');
})
Étapes personnalisées
La méthode step
simplifie la gestion des étapes car chaque étape est présentée comme une fonction async avec n'importe quel contenu à l'intérieur.
Le premier argument de la fonction est l'étape actuelle, qui dispose de la plupart des méthodes de l'API Allure (comme label
, epic
, attach
, etc.) :
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
})
})
Tags Cucumber
Les tags Cucumber avec des noms spéciaux (issue
et testId
) sont convertis en liens (les modèles de liens correspondants doivent être configurés au préalable) :
@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
Les tags Cucumber avec des noms spéciaux (feature
) sont mappés aux étiquettes Allure :
Feature: Test user role
@feature=login
Scenario: Login
Given I test login
Affichage du rapport
Les résultats peuvent être utilisés par n'importe lequel des outils de rapports proposés par Allure. Par exemple :
Ligne de commande
Installez l'outil de ligne de commande Allure, et traitez le répertoire des résultats :
allure generate [allure_output_dir] && allure open
Cela générera un rapport (par défaut dans ./allure-report
), et l'ouvrira dans votre navigateur.
Génération automatique du rapport
Vous pouvez également générer automatiquement le rapport en utilisant l'outil de ligne de commande Allure de manière programmatique. Pour ce faire, installez le package dans votre projet par :
npm i allure-commandline
Ensuite, ajoutez ou étendez votre hook onComplete
ou créez un service personnalisé pour cela :
// 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
Installez et configurez le plugin Jenkins Allure
Ajouter des captures d'écran
Des captures d'écran peuvent être jointes au rapport en utilisant la fonction takeScreenshot
de WebDriverIO dans le hook afterTest
pour Mocha et Jasmine ou le hook afterStep
pour Cucumber.
Définissez d'abord disableWebdriverScreenshotsReporting: false
dans les options du rapporteur, puis ajoutez dans le 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();
}
}
Comme montré dans l'exemple ci-dessus, lorsque cette fonction est appelée, une image de capture d'écran sera jointe au rapport Allure.