我们如何使用量角器 - 黄瓜框架在黄瓜最新版本(3.2.0)中生成html报告

时间:2018-02-01 06:53:14

标签: protractor

由于黄瓜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();
});
});

提前致谢。

2 个答案:

答案 0 :(得分:0)

您必须进行以下更改:

1)在量角器配置文件中设置cucumberOpts.format

cucumberOpts: {
   format: ["json:reports/report/cucumber/cucumber-report.json"],

此处reports/report/cucumber/cucumber-report.jsoncucumber 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,则可以使用以下包生成报告:

my github

答案 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')
}