Report 带量角器的黄瓜HTML报告

Report 带量角器的黄瓜HTML报告,report,cucumber,reporting,protractor,cucumberjs,Report,Cucumber,Reporting,Protractor,Cucumberjs,我正在使用黄瓜量角器(js)。我想生成报告文件,就像JVM版本一样。我见过用量角器测量茉莉花的例子,但在黄瓜上几乎没有 使用此配置时如何生成报告 最终目标是在Jenkins中发布此报告,或者在直接以HTML生成的任何其他地方发布 谢谢 使用最新版本的量角器(从1.5.0版开始),您现在可以生成JSON报告。大约7个月前,当我问这个问题时,这个功能并不存在 您所需要做的就是将其添加到pergrator-config.json文件中 resultJsonOutputFile: 'report.jso

我正在使用黄瓜量角器(js)。我想生成报告文件,就像JVM版本一样。我见过用量角器测量茉莉花的例子,但在黄瓜上几乎没有

使用此配置时如何生成报告

最终目标是在Jenkins中发布此报告,或者在直接以HTML生成的任何其他地方发布


谢谢

使用最新版本的量角器(从1.5.0版开始),您现在可以生成JSON报告。大约7个月前,当我问这个问题时,这个功能并不存在

您所需要做的就是将其添加到pergrator-config.json文件中

resultJsonOutputFile: 'report.json'
其中report.json是输出文件的位置

一旦有了这些,就可以使用量角器cucumberjunit()、cucumberjs junitxml()或类似的工具将JSON文件转换为Jenkins可以显示的有效XML文件

$ cat report.json | ./node_modules/.bin/cucumber-junit > report.xml

希望这有帮助。

您可以使用cucumber html report将json报告转换为html。使用将html报告添加到项目中

$ npm install cucumber-html-report --save-dev
如果使用量角器,则可以将以下代码添加到hooks.js以

  • 在每个失败的场景之后,在after钩子中将其附加到json报告中,拍摄一个浏览器屏幕截图
  • 即使cucumber opts format属性显示“pretty”,也要将测试结果写入json文件
  • 将json报告转换为HTML,包括失败场景的屏幕截图
var outputDir='someDir';
this.After(函数(场景、回调){
if(scenario.isFailed()){
browser.takeScreenshot().then(函数(base64png){
var decodedImage=新缓冲区(base64png,'base64')。toString('binary');
场景。附加(decodedImage,'image/png');
回调();
},函数(err){
回调(err);
});
}否则{
回调();
}
});
var createHtmlReport=函数(sourceJson){
var cucumberchtmlreport=require('cucumber-html-report');
var报告=新黄瓜HTMLReport({
source:sourceJson,//sourceJson
dest:outputDir//目标目录(如果不存在将创建)
});
report.createReport();
};
var JsonFormatter=Cucumber.Listener.JsonFormatter();
JsonFormatter.log=函数(字符串){
如果(!fs.existsSync(outputDir)){
fs.mkdirSync(outputDir);
}
var targetJson=outputDir+'cucumber_report.json';
writeFile(targetJson、字符串、函数(err){
如果(错误){
log('未能将测试结果保存到json文件');
控制台日志(err);
}否则{
创建HtmlReport(targetJson);
}
});
};

registerListener(JsonFormatter)当以另一个答案所示的方式使用cucumber html报告时,您可能会在cucumber/Digrator/cucumber html报告的较新版本上遇到问题

症状是index.html已创建,但在测试运行结束时保留为空

这是因为cucumber html报告正在使用异步文件写入,而量角器并没有等待它完成。(我们使用的代码与答案中的代码极为相似。)

这是一个工作设置:

在hooks.js中,保持屏幕截图部分与其他答案相同:

// 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();
        }
    });
});
在paragrator.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
};
这只是一个与黄瓜html报告直接相关的配置,其余的都是经过调味的

在运行测试之前,请确保报告目录存在

通过将报告创建放在这里,而不是将其附加为Cucumber侦听器,Cucumber将在退出之前等待异步操作完成


感谢您向Ola提供原始答案,我发现了异步问题(困难的方式),并认为当他们发现相同的问题时,我可以为他们节省时间。

请尝试下面适合我的代码:

您可以使用以下插件:

在package.json中添加以下依赖项,如下所示:

   "cucumber-html-reporter": "^5.0.0"
npm install
点击以下命令:

   "cucumber-html-reporter": "^5.0.0"
npm install
在cucumberconfig.ts中添加以下导入

import * as reporter from "cucumber-html-reporter"
 onComplete: () => {
      //var reporter = require('cucumber-html-reporter');
      var options = {
        theme: 'bootstrap',
        jsonFile: './cucumberreport.json',
        output: './cucumberreportsss.html',
        reportSuiteAsScenarios: true,
        launchReport: true,
        metadata: {
            "App Version":"0.3.2",
            "Test Environment": "STAGING",
            "Browser": "Chrome  54.0.2840.98",
            "Platform": "Windows 10",
            "Parallel": "Scenarios",
            "Executed": "Remote"
        }
      };

      reporter.generate(options);
    },
现在在cucumberconfig.ts中添加以下键

import * as reporter from "cucumber-html-reporter"
 onComplete: () => {
      //var reporter = require('cucumber-html-reporter');
      var options = {
        theme: 'bootstrap',
        jsonFile: './cucumberreport.json',
        output: './cucumberreportsss.html',
        reportSuiteAsScenarios: true,
        launchReport: true,
        metadata: {
            "App Version":"0.3.2",
            "Test Environment": "STAGING",
            "Browser": "Chrome  54.0.2840.98",
            "Platform": "Windows 10",
            "Parallel": "Scenarios",
            "Executed": "Remote"
        }
      };

      reporter.generate(options);
    },
完整的文件如下所示:

import {Config} from 'protractor'
import * as reporter from "cucumber-html-reporter"

export let config: Config = {
    directConnect:true,
     // set to "custom" instead of cucumber.
    framework: 'custom',
    // path relative to the current config file
    frameworkPath: require.resolve('protractor-cucumber-framework'),
    seleniumAddress: 'http://localhost:4444/wd/hub',
    // To run script without cucumber use below
    //specs: ['typescriptscript.js'],

    onComplete: () => {
      //var reporter = require('cucumber-html-reporter');
      var options = {
        theme: 'bootstrap',
        jsonFile: './cucumberreport.json',
        output: './cucumberreportsss.html',
        reportSuiteAsScenarios: true,
        launchReport: true,
        metadata: {
            "App Version":"0.3.2",
            "Test Environment": "STAGING",
            "Browser": "Chrome  54.0.2840.98",
            "Platform": "Windows 10",
            "Parallel": "Scenarios",
            "Executed": "Remote"
        }
      };

      reporter.generate(options);
    },
    capabilities: {
        'browserName': 'firefox',
        'marionette': true,
        //shardTestFiles: true,
    },
    SELENIUM_PROMISE_MANAGER: false,
    specs: [
        '../Features/*.feature' // accepts a glob
      ],
    // Run feature file for cucumber use below
    cucumberOpts: {
        // require step definitions
        require: [
          './stepDefination/*.js' // accepts a glob
        ],
        format: 'json:cucumberreport.json',

      },

      jasmineNodeOpts: {
        showColors: true,
    },

}; 
要附加失败的屏幕截图,请在钩子中使用下面的代码

  After(function(scenarioResult) {
    let self = this;
    if (scenarioResult.result.status === Status.FAILED) {
    return browser.takeScreenshot()
    .then(function (screenshot) {
        const decodedImage = new Buffer(screenshot.replace(/^data:image\/png;base64,/, ''), 'base64');
        self.attach(decodedImage, 'image/png');
    });
}
});

同一个用例,还没有答案,但是环顾四周……你试过这个吗:?问题是,因为我使用的是量角器,所以我不能像junit建议的那样重定向输出。尽管如此,最新版本的量角器解决了这个问题,您最终可以重定向输出并生成一个JSON文件,您可以使用量角器junit处理该文件并获取XML。谢谢。另外值得一看的是
吞咽量角器黄瓜html报告
您可能想看一下,它可以补充您当前的量角器/黄瓜设置,自动生成图解html报告-我收到以下错误:[launcher]错误:TypeError:undefined不是Object上的函数。(e2e/hooks.js:2:6)在Module.处编译(Module.js:460:26)在Object.Module.处扩展..js(Module.js:478:10)在Module.load(/Users/aaaa/.npm packages/lib/node_modules/cumber/node_modules/coffee script/lib/coffee script/register.js:45:36)在Module.处加载(Module.js:310:12)(module.js:365:17)在require(module.js:384:17)…因此我将hooks.js包装在module.exports…中,但随后它开始说[launcher]错误:ReferenceError:Cumber未定义……所以我尝试将其小写为c(Cumber),但它仍然不起作用:错误:TypeError:无法读取未定义的属性“JsonFormatter”?我们可以使用记录器执行每个步骤吗?如果可以,如何实现这一点?当ng run e2e命令执行时,浏览器中没有任何报告自动运行的方式completed@ShubhamJain在钩子中,我们称之为.attach,它是对世界的attach func的调用是吗?我的功能只是在报告文件夹中生成截图,我想将截图附加到HTML报告中,我找不到解决方案。请