从JavaScript测试自动化项目中获取功能和方案的总数

时间:2017-04-17 21:10:28

标签: javascript automation protractor cucumber cucumberjs

我正在使用量角器 - 黄瓜 - 框架进行测试自动化。我有多个功能文件。每个要素文件都有多个方案。我正在使用“cucumber-html-reporter”获取测试执行的HTML报告。此HTML报告提供有关功能总数和已执行方案总数的详细信息。因此,在测试执行后,我才知道我执行的“特征文件总数”和“场景总数”。

是否有任何命令或插件可用于获取

  • 功能总数
  • 每个要素文件中的方案总数

在我的JavaScript测试自动化中?

2 个答案:

答案 0 :(得分:1)

没有插件,这很容易实现。

为什么不创建一个以功能名称为键的对象,并将方案计为值,并将其console.log()或者保存到文件中以便稍后查看?

我将展示两种方式(2.x语法和1.x语法,因此我已经涵盖了基础)。

CucumberJS 2.x语法

let {defineSupportCode} = require('cucumber'),
    counter = {};

defineSupportCode(({registerHandler, Before}) => {

    registerHandler('BeforeFeature', function (feature, callback) {
        global.featureName = function () {
            return feature.name;
        };
        callback();
    });

   Before(function (scenario, callback){
        counter[featureName()] !== undefined ? counter[featureName()] += 1 : counter[featureName()] = 1;
        callback();
   });

   registerHandler('AfterFeatures', function (feature, callback) {
        console.log(JSON.stringify(counter));
        callback();
  });
});

CucumberJS 1.x语法

var counter = {};

module.exports = function () {

    this.BeforeFeature(function (feature, callback) {
        global.featureName = function () {
            return feature.name;
        };
        callback();
    });

   this.Before(function (scenario, callback){
        counter[featureName()] !== undefined ? counter[featureName()] += 1 : counter[featureName()] = 1;
        callback();
   });

   this.AfterFeatures(function (feature, callback) {
        console.log(JSON.stringify(counter));
        callback();
  });
};

<强>附加

如果要将其保存到文件中,以便稍后可以看到它,我建议使用fs-extra库。代替console.log(),请使用:

fs = require('fs-extra');
fs.writeFileSync("path/to/file.js","let suite = " + JSON.stringify(counter));

请注意,该文件将从您运行测试的位置创建。

Given I am running from "frameworks/cucumberjs"
When I generate a file from "frameworks/cucumberjs/hooks/counter.js" with the fs library at "./file.js"
Then the file "frameworks/cucumberjs/file.js" should exist

Given I am running from "frameworks/cucumberjs"
When I generate a file from "frameworks/cucumberjs/features/support/hooks/counter.js" with the fs library at "./hello/file.js"
Then the file "frameworks/cucumberjs/hello/file.js" should exist

只需确保您从正确的目录运行。

功能总数

如果您还想要功能的总数:

取代console.log()

console.log(JSON.stringify(counter) + "\nFeature Count: " + Object.keys(counter).length)

代替writeFile:

fs.writeFileSync("path/to/file.js","let suite = " + JSON.stringify(counter) + ", featureCount = " + Object.keys(counter).length);

由于我们已根据每个功能名称对场景计数进行排序,因此说明我们创建的对象中的键数量将为我们提供功能数量的计数。

答案 1 :(得分:1)

一个多功能的JS脚本,包括使用Gherkin解析AST的特征文件,并从该结构中计算特征,场景,标签等。

例如:

const glob = require('glob')
const Gherkin = require('gherkin')
const parser = new Gherkin.Parser()

const AST = glob
        .sync('./specifications/**/*.feature')
        .map(path => parser.parse(fs.readFileSync(path).toString()))

从那里你可以遍历AST对象并提取特征/场景计数和所需的所有其他信息。