0

我们需要能够运行一组动态的规范文件。

// Would be ideal, but not working
exports.config = {
    specs: () => {
        /* Load list of tests to bu run from API or from CSV file
    },
......
}

任何想法,将不胜感激。

4

2 回答 2

1

我会为 JavaScript 而不是 TS 回答这个问题,但它会让你了解你的选择

如果您希望在某处使用预定义的测试套件,那么有两种方法:

1.量角器

在你的配置中,做这样的事情

exports.config = {
    // ...

    specs: function (option) {

        let suites = require("./suites.json");

        return suites[option]
    }(process.env.SUITE)

    // ...
};

然后让你的suites.json

{
  "providers": [
    "tests/providers/*.spec.js"
  ],
  "users": [
    "tests/users/*.spec.js"
  ],
  "production": [
    "tests/*/expected-configs.spec.js",
    "tests/*/environment-configuration.spec.js",

    "tests/*/last-claim-filter.spec.js",
    "tests/*/diagnosis-bh-filter.spec.js"
  ],
  "sanity": [
    "tests/*/expected-configs.spec.js",
    "tests/*/environment-configuration.spec.js",
    "tests/*/info-panel.spec.js",
    "tests/*/robohelp.spec.js"
  ]
}

然后像这样启动量角器SUITE="production" protractor protractor.conf.js(Windows可能不同)

不幸的是,这种方法不能使用 CSV,而且听起来也不可行。顺便说一句,我也不明白你从 API 启动量角器是什么意思

2.咕噜声

这是一个困难的设置,所以我不能给你现成的答案,但这听起来像是你需要的

Grunt是一个任务运行器。您需要做的是配置一个任务,该任务将是:

  • 从命令行获取参数;
  • 清理带有临时文件的文件夹;
  • 将您的 CSV 文件转换为 json 到临时文件夹中;
  • 根据您的参数生成其他文件,例如 config
  • 根据传递的参数找到所需的测试套件并将其传递给量角器,甚至在它开始之前;
  • 启动量角器;
于 2019-08-29T21:34:42.623 回答
0

这可能很棘手,但您可以尝试使用getMultiCapabilities配置方法:

https://github.com/angular/protractor/blob/master/lib/config.ts#L383

想法是 - 您的功能对象可以具有specs属性: specs?: string[];它会将规范添加到配置中的规范,但它可以用于动态设置它们。您也可以使用exclude?: string[];动态排除运行中的一些测试文件。

所以代码可能看起来像这样:

exports.config = {
    specs: [] // just empty, we will override it in capabilities

    // If getMultiCapabilities is specified, both capabilities and multiCapabilities will be ignored
    getMultiCapabilities: async function () {
         // For example reading specs from HTTP response
         const request = require('request-promise-native')
         const specsFromAPI = await request.get('http://some.api/specs')
         // should return array of Capabilities objects
         return [{
             browserName: 'chrome',
             specs: specsFromAPI
         }]
    }
}
于 2019-08-30T09:38:41.913 回答