同时运行多个Selenium测试

seb*_*ner 21 testing selenium selenium-chromedriver

我想同时运行多个Selenium测试(在Jenkins服务器上).

它目前只运行一次测试,因为ChromeDriver似乎通过特殊端口进行通信.所以不知怎的,我想我必须通过Selenium将某种端口设置传递给ChromeDriver来启动多个测试.

不幸的是,Selenium网站对于该主题是空的:http: //docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#parallelizing-your-test-runs

从我的观点来看,如果测试在本地运行或在Jenkins上运行没有区别,问题是相同的.我们需要以某种方式配置ChromeDriver.问题是如何.

任何人都有一些想法或指示在哪里查看以及涉及哪些文件来完成这项工作?

Ard*_*sco 19

您可以非常轻松地在本地运行多个chromedriver实例,只需实例化多个驱动程序对象,chromedriver将保持配置文件分离并找到一个可以自行运行的端口.

这里有一个链接,可以使用TestNG和Maven运行多个测试:

https://github.com/Ardesco/Selenium-Maven-Template

只需克隆上面的项目并在命令行中运行以下命令:

mvn verify -Pselenium-tests -Dbrowser=chrome -Dthreads=2
Run Code Online (Sandbox Code Playgroud)

它利用了TestNG管理线程池的能力,并且如果指定的话将打开多个实例.您可以使用jUnit执行相同的操作,但是您需要编写一个自定义测试运行器来将测试发送到单个线程中.

如果您决定使用gradle,它可以使用TestNG和jUnit处理为您管理线程池,并且很多人更喜欢使用它.


小智 9

这是一个老问题,但对于仍在阅读的人来说,很有可能在使用Grid的情况下并行运行多个Selenium WebDriver实例.我已经使用Chrome,FireFox和PhantomJs(最多5个)成功测试了这个.每个WebDriver实例都使用隔离的上下文,因此会话冲突不应成为问题.但要注意服务器端冲突,具体取决于您网站的要求!

对于NUnit用户,NUnit 3.2.1现在具有"TestContext.Current.WorkerId"属性,允许您为每个NUnit工作者隔离一个WebDriver实例.

  • 在同一台机器上运行多个浏览器通常会影响性能,因此请注意不要使用太多的浏览器实例,否则实际上可能会增加测试时间!


Ame*_*mey 6

您正在寻找的是Selenium Grid 2.

Grid允许您:

  • 通过在多台机器上分配测试来扩展(并行执行)
  • 从中心点管理多个环境,可以轻松地针对大量浏览器/操作系统运行测试.
  • 通过允许您实现自定义挂钩以利用虚拟基础架构来最小化网格的维护时间.

  • 是的,但Grid看起来像云计算解决方案.我实际上想在一台机器上运行多个测试.因此,我宁愿只想在单个节点上运行并行测试,而不是购买新硬件.Grid仍然是正确的吗? (4认同)
  • 对于所要求的内容来说,这是一种巨大的过度杀伤力.Ardesco的答案应该是公认的答案. (3认同)
  • 据我所知,从https://code.google.com/p/selenium/wiki/ScalingWebDriver我想要的是根本不可能的.这就是为什么人们扩展到网格并且每台机器一次只运行一次测试的原因. (2认同)