J'utilise le rapporteur avec concombre (js). J'aimerais générer des fichiers de rapport, comme avec la version Cucumber-JVM. J'ai vu des exemples d'utilisation de Protractor avec Jasmine, mais pratiquement rien avec Cucumber.
Comment générez-vous des rapports lorsque vous utilisez cette configuration?
L'objectif final est de publier ce rapport dans Jenkins, ou ailleurs, s'il est généré directement en HTML.
Merci!
Avec la dernière version de rapporteur (à partir de la version 1.5.0), vous pouvez désormais générer un rapport JSON. Quand j'ai posé cette question il y a environ 7 mois, cette fonctionnalité n'était pas là.
Tout ce que vous avez à faire est d’ajouter ceci à votre fichier protractor-config.json.
resultJsonOutputFile: 'report.json'
Où report.json est l'emplacement du fichier de sortie.
Une fois que vous avez cela, vous pouvez utiliser rapporteur-concombre-junit ( https://www.npmjs.com/package/protractor-cucumber-junit ), cucumberjs-junitxml ( https://github.com/sonyschan/cucumberjs-junitxml ) ou quelque chose de similaire pour transformer le fichier JSON en un fichier XML valide que Jenkins peut afficher.
$ cat report.json | ./node_modules/.bin/cucumber-junit > report.xml
J'espère que cela t'aides.
Vous pouvez utiliser cucumber-html-report pour convertir un rapport json en HTML. Ajoutez concombre-html-report à votre projet avec
$ npm install cucumber-html-report --save-dev
Si vous utilisez rapporteur, vous pouvez ajouter le code suivant à hooks.js to
var outputDir = 'someDir';
this.After(function(scenario, callback) {
if (scenario.isFailed()) {
browser.takeScreenshot().then(function(base64png) {
var decodedImage = new Buffer(base64png, 'base64').toString('binary');
scenario.attach(decodedImage, 'image/png');
callback();
}, function(err) {
callback(err);
});
} else {
callback();
}
});
var createHtmlReport = function(sourceJson) {
var CucumberHtmlReport = require('cucumber-html-report');
var report = new CucumberHtmlReport({
source: sourceJson, // source json
dest: outputDir // target directory (will create if not exists)
});
report.createReport();
};
var JsonFormatter = Cucumber.Listener.JsonFormatter();
JsonFormatter.log = function(string) {
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir);
}
var targetJson = outputDir + 'cucumber_report.json';
fs.writeFile(targetJson, string, function(err) {
if (err) {
console.log('Failed to save cucumber test results to json file.');
console.log(err);
} else {
createHtmlReport(targetJson);
}
});
};
this.registerListener(JsonFormatter);
Lorsque vous utilisez cucumber-html-report de la manière indiquée par l’autre réponse, vous pouvez rencontrer des problèmes avec les versions plus récentes de Cucumber/Protractor/Cucumber-html-report.
Le symptôme est que le fichier index.html est créé mais laissé vide à la fin du test.
Cela s'explique par le fait que cucumber-html-report utilise une écriture de fichier asynchrone et que le rapporteur n'attend pas son achèvement. (Nous utilisions un code qui ressemble étrangement au code dans la réponse.)
Ceci est une configuration de travail:
dans hooks.js, la partie de la capture d’écran reste identique à celle de l’autre réponse:
// Generate a screenshot at the end of each scenario (if failed; configurable to always)
cuke.After(function(scenario, done) {
browser.getProcessedConfig().then(config => {
if (!config.screenshots.onErrorOnly || scenario.isFailed()) {
return browser.driver.takeScreenshot().then(function(png) {
let decodedImage = new Buffer(png.replace(/^data:image\/(png|gif|jpeg);base64,/, ''), 'base64');
scenario.attach(decodedImage, 'image/png');
done();
});
} else {
done();
}
});
});
dans protractor.conf.js:
var cucumberReportDirectory = 'protractor-report';
var jsonReportFile = cucumberReportDirectory + '/cucumber_report.json';
exports.config = {
cucumberOpts: {
format: 'json:./' + jsonReportFile,
},
onCleanUp: function () {
var CucumberHtmlReport = require('cucumber-html-report');
return CucumberHtmlReport.create({
source: jsonReportFile,
dest: cucumberReportDirectory,
title: 'OptiRoute - Protractor Test Run',
component: new Date().toString()
}).then(console.log).catch(console.log);
},
ignoreUncaughtExceptions: true,
untrackOutstandingTimeouts: true
};
Ce n'est que la configuration directement liée à concombre-html-rapport, le reste est assaisonné au goût.
Assurez-vous que le répertoire de rapport existe avant d'exécuter les tests.
En mettant la création de rapport ici au lieu de l'attacher en tant qu'écouteur Cucumber, Cucumber attendra que l'opération asynchrone soit terminée avant de quitter.
Merci à Ola pour la réponse originale, j'ai découvert le problème asynchrone (à la dure) et je pensais pouvoir faire gagner du temps à quelqu'un qui trouve le même problème.