我有一个Selenium测试套件,使用我用TestNG
运行的IEDriver
。目标是使用此测试套件进行回归。我想针对每个生产服务器运行此测试套件。目前,我可以将其指向任何服务器并运行测试。但是,问题是我一次只能运行一个。连续运行它们需要很长时间。将一个Windows服务器指向每个Linux生产服务器不是一个可行或可扩展的选项。我想要某种方式在单独的线程上运行它们,如果可能的话,从一个Windows服务器运行它们。
我一直在研究Selenium Grid/Remote Driver
,但我不确定这是否是正确的解决方案,或者如何实现我的目标。从我读到的内容来看,我想我希望每个"节点"都是一个不同的生产服务器,但我对这项技术是全新的。
环顾了堆栈溢出,但我没有找到任何完全回答我的问题的东西。如果有人有此类问题或这些技术的经验,我将不胜感激。
我确实使用Selenium Grid实现了这样的事情。
您需要做的是:
- 在此处下载硒服务器
-
在一台服务器上启动一个Selenium集线器,如下所示:
Java -jar Selenium-server-standalone-2.44.0.jar -role hub
-
在每个测试服务器上启动Selenium节点,如下所示:
Java -jar Selenium-server-standalone-2.44.0.jar -role node -hub
http://localhost:4444/grid/register
-
使用 Selenium 集线器创建驱动程序,如下所示:
CommandExecutor executor = new SeleneseCommandExecutor(new
URL("http://localhost:4444/"), new URL("http://www.google.com/"),
capabilities);
WebDriver driver = new RemoteWebDriver(executor, capabilities);
更多信息在这里和这里
在Selenium Grid中,你有:
L
:执行Java代码的机器(本地机器或Jenkins节点)。
N
:一台或多台托管运行测试的浏览器实例的计算机。
H
:负责引导L
和N
之间的流量的机器。
当您有太多的测试无法在一台机器上运行整个套件时,这是一个非常有用的选择。如果你有自己的虚拟机网格,我建议使用SeleniumGridExtras——它可以处理IE Webdriver的一些怪异之处。如果没有,您可以使用BrowserStack或SauceLabs快速设置。
即使没有 Selenium Grid,您也可以使用并行执行在本地运行多个测试线程并增加线程计数。(threadPoolSize = 3
特定@Test
批注,或parallel="methods" thread-count="28"
套件 xml 文件中。
但是,无论如何,Selenium测试的每台机器执行时间都足够长,因此可以连续运行套件。在IE中,在给定计算机上一次运行多个测试通常被认为是不明智的。你可以链接 Jenkins 作业,让它们一个接一个地完成。