由于黄瓜3删除了registerHandler和registerListener,我们如何在黄瓜3.2.0中生成html报告。我使用下面的代码在黄瓜2中生成json报告。
defineSupportCode(function({ registerListener }) {
var JsonFormatter = new Cucumber.JsonFormatter();
JsonFormatter.log = function(string) {
var outputDir = 'testreports/report';
var fileName = 'cucumber-report.json';
var targetJson = path.resolve(outputDir, fileName);
if (fse.existsSync(outputDir)) {
fse.moveSync(outputDir, outputDir + '_' + moment().format('YYYYMMDD_HHmmss'), {
overwrite: true
});
}
fse.outputFileSync(targetJson, string);
};
registerListener(JsonFormatter);
});
并在html报告的代码下面使用
defineSupportCode(function({ registerHandler }) {
registerHandler('AfterFeatures', function(features, callback) {
var options = {
theme: 'bootstrap',
jsonFile: 'testreports/report/cucumber-report.json',
output: 'testreports/report/cucumber-report.html',
reportSuiteAsScenarios: true,
};
reporter.generate(options);
callback();
});
});
提前致谢。
答案 0 :(得分:0)
您必须进行以下更改:
1)在量角器配置文件中设置cucumberOpts.format
cucumberOpts: {
format: ["json:reports/report/cucumber/cucumber-report.json"],
此处reports/report/cucumber/cucumber-report.json
是cucumber json file path
,您必须在此处指定路径。
框架会自动生成结果'所有场景执行完毕后,json数据作为文件内容。
2)如果父文件夹不存在,则在加载测试框架之前创建cucumber json file path
的父文件夹
选项1:将创建父文件夹代码放在量角器conf文件的头部。
选项2:创建一个Protractor插件实现接口:setup()
,它将在测试框架加载之前执行。
// plugin: create-report-folder.js
var moment = require("moment");
var fse = require("fs-extra");
module.exports = {
setup: function() {
var reportDir = this.config.options.reportDir;
if (fse.existsSync(reportDir)) {
fse.moveSync(
reportDir,
reportDir + "_" + moment().format("YYYYMMDD_HHmmss"),
{ overwrite: true}
);
}
fse.mkdirsSync(reportDir);
}
};
注意:两个选项都需要使用Sync api来创建文件夹。
3)创建Protractor插件实现接口:postResults
将在所有方案执行完毕后执行。
// plugin: cucumber-html-reporter.js
var reporter = require("cucumber-html-reporter");
module.exports = {
postResults: function() {
var options = {
theme: "bootstrap",
jsonFile: this.config.options.jsonFile,
output: this.config.options.htmlFile,
reportSuiteAsScenarios: true
};
reporter.generate(options);
}
};
注意:我尝试在黄瓜AfterAll
钩子中生成黄瓜html报告,但失败了,似乎Cucumber JsonFormater生成黄瓜json文件是Async,当AfterAll
挂钩开始执行时,黄瓜json文件尚未创建。
我一直在查看formatOption
,应该是一种将JsonFormater生成黄瓜json文件改为Sync的方法,然后我们可以使用AfterAll
hook。
4)在量角器配置文件中设置插件
// protractor conf file
exports.config = {
plugins: [
// plugin to create report parent folder
{
path: "supports/create-report-folder.js",
options: {
reportDir: "reports/report/cucumber"
}
}
// plugin to generate cucumber html report
{
path: "supports/cucumber-html-reporter.js",
options: {
jsonFile: "reports/report/cucumber/cucumber-report.json",
htmlFile: "reports/report/cucumber/cucumber-report.html"
}
}
]
Protractor + Cucumber4 + HTML Report
的{{1}}的可行脚手架
我当地的Protractor + Cucumber3 + HTML Report
脚手架有一些依赖性问题,我正在研究如果你必须使用黄瓜3。
5)如果您使用multiCapabilities,则可以使用以下包生成报告:
答案 1 :(得分:0)
如果 protractor.conf.js 的位置与 node_modules 不在同一级别,则 cucumberOpts.format 路径将相对于其当前文件位置,并且 protractor-multiple-cucumber-html-reporter-plugin 查找json 文件相对于父根文件夹,并警告未找到 json 文件。
为了解决这个问题,提供json文件的绝对路径到cucumberOpts.format,如下所示。如果您在 Angular 应用程序中使用 Cucumber 进行 e2e 测试,其中 protractor.conf.js 通常存在于 e2e 文件夹中,则这适用。
cucumberOpts: {
require: [path.resolve(process.cwd(), 'e2e/steps/*.ts')],
format: 'json:'+ path.resolve(process.cwd() + '/reports/cucumber-ui-reports.json')
}