2013-12-19 81 views
30

我找不到任何有关如何设置它的信息,但它似乎是一个非常基本的概念,所以我确信有一个答案。量角器 - 在不同的浏览器上并行运行多个测试

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

有什么办法可以在多个浏览器上并行运行它吗?

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

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

+0

是否意味着运行并行测试 – allenhwkim

回答

19

更新日期2014年2月 - 此答案已经失效。使用Paolo Moretti的答案在下面。


可能有更好的方法来做到这一点,但现在我只是在执行这些并发咕噜任务。

1)添加咕噜并发插件

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.registerTask('protractor-e2e', ['concurrent:protractor_test']); 

繁重的任务和执行,应该给你并发量角器测试。

+0

这似乎是最好的答案,直到量角器增加对Selenium Grid的直接支持。请参阅问题#111 [如何将更多配置传递给硒网格?](https://github.com/angular/protractor/issues/111)和[并行运行Selenium测试](http://sauceio.com/index .PHP /标签/并行测试/)。 –

1

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

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

这一变化被合并到主,但较新的一个(512)仍然是开放的。一旦他们合并成主人(应该是今天或明天根据拉请求中的讨论),它应该在你手中:D。

+0

谢谢指出!一旦合并后,这将很好。 – tennisgent

57

有用于调用multiCapabilities新选项:

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

这里有一个complete example

+0

感谢您的更新。你知道在每个浏览器中运行单独的spec文件的方法吗?它看起来像只能在多个浏览器中运行一个测试套件,但我真的很想能够并行运行多个规范...... – tennisgent

+0

如果您使用的是grunt-protractor-runner,则可以将规格作为参数。通过这种方式,您可以为每个规范创建一个任务,然后使用grunt-concurrent或类似的方式并行运行所有这些任务。 –

+0

我添加了上面的代码,并且没有打开带有FF驱动程序的Firefox。有谁知道为什么? –

12

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

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

如果你宁愿让每个测试文件只运行一次,但在多个浏览器分裂,然后使用splitTestsBetweenCapabilities选项:

splitTestsBetweenCapabilities: true 

This blog post进入有关splitTestsBetweenCapabilities

+0

听起来不错。 “splitTestsBetweenCapabilities”选项到底做了什么? – tennisgent

+0

此选项现在被删除;请参阅https://github.com/angular/protractor/blob/master/docs/referenceConf.js#L77 –

1

这是我如何实现这一目标。只需添加下面的部分到conf.js文件:

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

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

+0

这样做时是否遇到间歇性故障的问题? – Will

+0

我遇到了一些需要在代码中修复的问题。我现在不记得任何细节。 – exbuddha

相关问题