量角器 - 在不同的浏览器上并行运行多个测试

时间:2013-12-19 21:27:03

标签: angularjs selenium-grid protractor

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

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

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

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

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

6 个答案:

答案 0 :(得分:63)

有一个名为multiCapabilities的新选项:

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

这是complete example

答案 1 :(得分:22)

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']);

执行该操作应该可以同时进行量角器测试。

答案 2 :(得分:14)

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

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

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

splitTestsBetweenCapabilities: true

This blog post详细介绍了splitTestsBetweenCapabilities

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

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

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

相关问题