【问题标题】:Protractor - run multiple tests in parallel on different browsersProtractor - 在不同的浏览器上并行运行多个测试
【发布时间】:2013-12-19 21:27:03
【问题描述】:

我找不到任何关于如何设置的信息,但这似乎是一个非常基本的概念,所以我确信那里有答案。

我知道如何通过在配置中设置capabilities 对象的browserName 属性在不同的浏览器上运行量角器。这很好用。我可以将其设置为 'chrome''firefox' 或任何我需要的,它会按预期运行。但是针对多个浏览器运行单个测试套件的唯一方法(据我所知)是创建单独的配置文件,每个配置文件都有不同的browserName,然后使用自己的配置运行每个浏览器。这行得通,但它真的很慢,因为测试是按顺序运行的,而不是同时运行的。

有没有办法在多个浏览器上并行运行?

可以在 SauceLabs 上完成吗?甚至使用本地 Selenium-Grid?

我们只是想简化我们的测试过程,这将是一个巨大的帮助。任何建议或信息将不胜感激。提前致谢。

【问题讨论】:

  • 你的意思是运行并行测试

标签: angularjs selenium-grid protractor


【解决方案1】:

为此有一个名为 multiCapabilities 的新选项:

multiCapabilities: [{
  'browserName': 'chrome'
}, {
  'browserName': 'firefox'
}],

这是complete example

【讨论】:

  • 感谢您的更新。您是否知道在每个浏览器中运行单独的规范文件的任何方法?看起来你只能在多个浏览器中运行一个测试套件,但我真的很希望能够并行运行多个规范......
  • 如果您使用 grunt-protractor-runner,您可以将规格作为参数传递。这样,您可以为每个规范创建一个任务,然后使用 grunt-concurrent 或类似的东西并行运行所有这些。
  • 我添加了上面的代码,不管有没有 FF 驱动程序,它都不能打开 Firefox。有谁知道为什么?
【解决方案2】:

2014 年 2 月更新 - 此答案不再有效。在下面使用 Paolo Moretti 的答案。


可能有更好的方法来做到这一点,但目前我只是将这些作为并发 Grunt 任务执行。

1) 添加 grunt 并发插件

npm install grunt-concurrent --save-dev

2) 在 grunt.initConfig 下为每个浏览器添加一个任务。我们可以将浏览器添加为 arg 以重用我们的配置文件。

protractor: {
        options: {
            keepAlive: true,
            singleRun: false,
            configFile: "test/protractor.conf.js"
        },
        run_chrome: {
            options: {
                args: {
                    browser: "chrome"
                }
            }
        },
        run_firefox: {
            options: {
                args: {
                    browser: "firefox"
                }
            }
        }
    },

3) 将这些注册为任务;

grunt.registerTask('protractor-chrome', ['protractor:run_chrome']);
grunt.registerTask('protractor-firefox', ['protractor:run_firefox']);

4) 在 grunt.initConfig 下创建并发任务

concurrent: {
        protractor_test: ['protractor-chrome', 'protractor-firefox']
    },

5) 为并发添加 grunt 任务

grunt.registerTask('protractor-e2e', ['concurrent:protractor_test']);

执行它应该会给你并发量角器测试。

【讨论】:

【解决方案3】:

使用multiCapabilities 将在每个浏览器中运行所有测试。因此,下面的配置将运行每个测试两次,一次在 Firefox 中,一次在 Chrome 中:

multiCapabilities: [{
  'browserName': 'chrome'
}, {
  'browserName': 'firefox'
}],

如果您希望每个测试文件只运行一次,但在多个浏览器之间拆分,请使用splitTestsBetweenCapabilities 选项:

splitTestsBetweenCapabilities: true

This blog post 详细介绍了 splitTestsBetweenCapabilities

【讨论】:

【解决方案4】:

我遇到了同样的问题,我发现他们正在添加我们所说的并行执行功能! :D

看看这个:https://github.com/angular/protractor/pull/492

该更改已合并到 master,但较新的更改 (512) 仍处于打开状态。一旦他们将它合并到 master (根据拉取请求中的讨论应该是今天或明天)它应该在你手中:D。

【讨论】:

  • 感谢您指出这一点!一旦合并,那就太好了。
【解决方案5】:

BrowserStack 也可用于此目的。它有相当详细的入门指南:https://www.browserstack.com/automate/node,但它不是免费的

【讨论】:

    【解决方案6】:

    这就是我实现这一目标的方式。只需将以下部分添加到 conf.js 文件中:

    capabilities: {
      browserName: 'chrome',
      shardTestFiles: true,
      maxInstances: 1
    }
    

    shardTestFiles = true 使每个规范文件在新的浏览器实例中运行。 maxInstances 是可以同时打开的浏览器的最大数量。

    【讨论】:

    • 您在执行此操作时遇到过间歇性故障问题吗?
    • 我遇到了一些需要在代码中修复的问题。我现在不记得任何细节。
    猜你喜欢
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    相关资源
    最近更新 更多