【问题标题】:How to run it blocks in parallel in protractor?如何在量角器中并行运行它?
【发布时间】:2018-02-26 22:18:20
【问题描述】:

我的 spec 文件涵盖特定测试场景的 50 个不同测试用例。每个测试用例都包含在单独的 it 块中。规范文件需要 2 小时才能执行。我想以某种方式对 it 块进行分类,以便它们在多个浏览器实例中并行运行。例如它应该像(5 it 块 * 10 个浏览器实例)一样并行运行。我不想将 spec 文件分成不同的部分。有什么替代方案吗?

【问题讨论】:

  • --grep 标志允许您运行单独的 it 块(量角器 conf.js --grep='tagName'),但它不能解决并行执行的目的。
  • 我也尝试使用并行量角器 (npmjs.com/package/parallel-protractor) 依赖,但出现错误:path.js:7 throw new TypeError('Path must be a string. Received ' + inspect(path) ); ^ 类型错误:路径必须是字符串。收到未定义

标签: npm jasmine protractor


【解决方案1】:

当您决定执行测试用例时,请使用下面列出的任何配置。请参考典型的conf.js 文件并选择conf.js 文件中的任何配置。

exports.config = {

  // The address of a running selenium server.
  seleniumAddress: 'http://localhost:4444/wd/hub',

  // Capabilities to be passed to the webdriver instance.
  capabilities: {
    'browserName': 'chrome'
  },

  specs: ['spec1.js','spec2.js']

};

Type-1:单个浏览器实例:在某一时间启动一个浏览器实例 时间。

conf.js 文件中的示例配置。

capabilities: {
     browserName: 'chrome',
 },
specs: ['spec1.js','spec2.js']

以上配置将启动chrome浏览器实例,并一一执行所有规范

sequestial --> [chrome] --> spec1.js --> spec2.js

Type-2:不同的浏览器实例将并行启动,所有 spec:[] 标签中提到的规范将在每个 浏览器的实例分开。

conf.js 文件中的示例配置。

multiCapabilities: [
     { browserName: 'chrome', },
     { browserName: 'firefox', },
 ],
specs: ['spec1.js','spec2.js','spec3.js']

上述配置将启动 chrome、firefox 浏览器并在每个浏览器实例中并行执行所有规范。

         --> [chrome]  ---|--> spec1.js --> spec2.js --> spec3.js
         |                
       parallel           
         |
         --> [firefox] ---|--> spec1.js --> spec2.js --> spec3.js

Type - 3:以下配置将帮助您执行不同的 不同浏览器实例中的一组规范。

conf.js 文件中的示例配置。

multiCapabilities: [
    { 
        browserName: 'chrome', 
        specs:['spec1.js']
    },
    { 
        browserName: 'firefox', 
        specs:['spec2.js'] 
    },
],

以上配置将启动chrome、firefox浏览器并在chrome中执行spec1.js,在firefox实例中执行spec2.js

         --> [chrome]  ---|--> spec1.js
         |                
       parallel           
         |
         --> [firefox] ---|--> spec2.js

Type - 4:在同一浏览器上并行执行不同的规范文件。

假设您的测试套件中有 5 个规范文件,并且您希望 并行执行所有内容。下面的配置可以帮助你 这样做。

conf.js 文件中的示例配置。

capabilities: {
    browserName: 'chrome',
    specs: [
        'spec1.js', 'spec2.js', 'spec3.js' , 'spec4.js' , 'spec5.js'
    ],
    maxInstances : 5,
    shardTestFiles: true
}

上述配置将启动 5 个 chrome 实例,每个规范将在这 5 个 chrome 实例中并行执行。

                             |-- [instance 1] --|--> spec1.js
                             |-- [instance 2] --|--> spec2.js
             --> [chrome] ---|-- [instance 3] --|--> spec3.js
                             |-- [instance 4] --|--> spec4.js
                             |-- [instance 5] --|--> spec5.js

maxInstances 数字表示 Protractor 允许创建的浏览器窗口的最大数量。

例如,将 maxInstances 设置为 10,包含 200 个测试的测试套件将导致 Protractor 创建 10 个 Chrome 实例,每个实例运行 20 个测试,而没有 shardTestFiles,这将是一个运行所有 200 个测试的 Chrome 实例。

【讨论】:

  • 感谢您的回答,但此解决方案适用于规范级别。我正在寻找一种替代方法,以便我只需将单个 it 块分组以并行运行。
【解决方案2】:

您无法在同一个规范文件中并行运行“it”块。另一种解决方案是分割您的规范文件,例如spec1.jsspec2.jsspec3.js

然后您将其添加到您的 conf.js 文件中

specs:['filePath/spec1.js','filePath/spec2.js','filePath/spec3.js'],
capabilities: {
    shardTestFiles: true,
    maxInstances: 5 //set this to amount you want running at once
}

specs 参数将接受数组,或者您可以使用诸如 filePath/*.js 之类的通配符来运行该文件夹中的所有 .js 文件(确保它们是量角器测试用例)

maxInstances 将设置为一次运行的数量。我发现一次运行多个实例时使用无头模式更容易,对于 chrome,该选项如下所示:

chromeOptions: {
        args: ["--headless", "--disable-gpu", "--window-size=1920,1080"]
}

【讨论】:

  • 此解决方案适用于规范级别,是一种常见的解决方案。我正在寻找一种替代方法,以便我只需将单个 it 块分组以并行运行。
  • @Mayank 这似乎是你现在想要的 repo 中的功能请求github.com/angular/protractor/issues/569 可能想看看,当它被实施时,这可能会解决你的问题跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
相关资源
最近更新 更多