Selenium Grid是一个分布式
测试平台,它可以通过一个
server端的hub服务来控制多个用于提供Selenium脚本运行环境的client端,起到并发在多台机器上运行的作用。整个结构是由一个hub节点和若干个代理节点组成的。hub用于管理各个代理节点的注册和状态信息,并接受远程客户端代码的请求调用,然后把请求的命令再转给代理节点来执行,同时需要一个hub和至少一个代理节点。除此之外,grid还支持一种更友好的功能,其可以根据用例中启动测试的类型来相应的把用例转给符合匹配要求的测试代理。
下面说下本人如何搭建环境的:
1. 准备三台机器(一台为主机[提供hub服务],另两台为从机[client端])
2. 三台机器都安装好JDK环境(可参见本人的“Selenium2.0测试工程的搭建”)
3. 三台机器上都确保有selenium server的jar包
本人在主机上创建主节点,并在主机和两台从机上各创建一个子节点。最终的现象是在这三台机器上并发运行。
(1) 启动主节点
在主机上打开命令行,cd至selenium server jar包所在的路径下,用命令启动主节点hub服务:
java -jar selenium-server-standalone-2.39.0.jar -role hub 启动的默认端口是4444,如果要改变这个端口号,则命令后加上-port XXXX,如端口号改为6666,命令为java -jar selenium-server-standalone-2.39.0.jar -role hub -port 6666
(2) 启动子节点
在从机上打开命令行,cd至selenium server jar包所在的路径下,用命令启动子节点的服务:java -jar selenium-server-standalone-2.39.0.jar -role node -hub http://10.1.3.59/grid/register 启动的默认端口是5555。其中,10.1.3.45为hub所在主机的IP地址。由于本人在主机上创建了主节点和一个子节点,所以这两个节点的port应不同。
启动完成后,可以在主机上打开浏览器http://localhost:4444/grid/console,来查看各节点的状态。
最后,编辑代码(主节点的port为4444,各子节点的port为5555,主机IP为10.1.3.59,两台从机IP分别为10.1.3.197和10.1.3.200):
public string[] strServer = new string[3]; public const string strWeb = "http://www.baidu.com"; public void TestGrid() { strServer[0] = "http://10.1.3.197:5555/wd/hub"; strServer[1] = "http://10.1.3.200:5555/wd/hub"; strServer[2] = "http://10.1.3.59:5555/wd/hub"; int nThreadCount = 3; Thread[] threads = new Thread[nThreadCount]; for (int i = 0; i < nThreadCount; i++) { threads[i] = new Thread(new ThreadStart(OpenWeb)); threads[i].Name = i.ToString(); } foreach(Thread t in threads) { t.Start(); } Thread.Sleep(60000); } public void OpenWeb() { DesiredCapabilities dc = DesiredCapabilities.InternetExplorer(); int nId = Convert.ToInt32(Thread.CurrentThread.Name); Uri seleniumServer = new Uri(strServer[nId]); Uri addr = new Uri(strWeb); RemoteWebDriver driver = new RemoteWebDriver(seleniumServer, dc); driver.Navigate().GoToUrl(addr); } |