从 JavaScript 个测试自动化项目中获取功能和场景的总数

To get total number of features and scenarios from JavaScript test automation project

我正在使用 protractor-cucumber-framework 进行测试自动化。我有多个功能文件。每个功能文件都有多个场景。我正在使用 "cucumber-html-reporter" 来获取 HTML 测试执行报告。此 HTML 报告提供了有关已执行的功能总数和场景总数的详细信息。所以在测试执行之后,我才知道 'total number of feature files' 和 'total number of Scenarios' 我被处决了。

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

在我的 JavaScript 测试自动化中?

无需插件即可轻松实现。

为什么不创建一个以特征名称为键,场景为值的对象,然后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);

由于我们已经获得了按每个功能名称排序的场景计数,说明我们创建的对象中的键数量将为我们提供功能数量的计数。

一个通用的 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 对象并提取 features/scenarios 计数和所有其他所需信息。