一、Selenium Grid解决什么问题
可以分布式运行自动化测试用例,提高执行效率和解决兼容性测试的要求。
二、运行机制
selenium Grid使用Hub和Node模式,一台计算机作为Hub(管理中心)管理其他多个Node(节点)计算机。Hub负责将测试用例分发给多台Node计算机执行,并收集多台Node计算机执行结果的报告,汇总后提交一份总的测试报告。
Hub:
在分布式测试模式中,只能有一台作为Hub的计算机。
Hub负责管理测试脚本, 并负责发送脚本给其他Node节点。
所有的Node节点计算机会在Hub计算机中先进行注册,注册成功后再和Hub计算机通信,Node节点计算机会告之Hub自己的相关信息。例如,Node节点的浏览器相关信息、最多并发数等。
Hub计算机可以给自己分配执行测试用例的任务。
Hub计算机分发的测试用例任务会在各个Node节点计算机执行。
Node:
在分布式测试模式中,可以有一个或者多个Node节点。
Node节点会打开本地的浏览器完成测试任务并返回测试结果给Hub。
Node节点的操作系统和浏览器版本无需和Hub保持一致。
在Node节点上可以同时打开多个浏览器并行执行测试任务。
三、使用方法
1、准备两台计算机,一台作为Hub,命名为A;另一台作为Node,命名为B。
2、打开http://selenium-release.storage.googleapis.com/index.html?path=2.51/地址,
下载selenium-server-standalone- 2.53.1.jar,保存在两台计算机的硬盘C:/grid文件夹中。
3、在A计算机上打开cmd窗口,输入并执行以下语句:
java -jar selenium-server-standalone- 2.53.1.jar -role hub 或者
java -jar selenium-server-standalone- 2.53.1.jar -role hub -hubConfig hub.json
参数:
role参数:hub表示作为管理中心
port参数:hub服务器的端口号
hubConfig:hub各种配置的json文件路径。hub.json与jar包在同一个文件夹中
此语句表示使用java命令把jar文件作为程序执行,并且把参数role和hubConfig传递给jar文件的函数,用来启动Hub管理中心,如下图所示:
图中“http://172.16.231.45:4446/grid/”为Hub的地址。在计算机上打开http://172.16.231.45:4446/grid/console,验证此网址是否显示出“view config”的链接。
4、在B计算机中打开cmd窗口,输入下面命令:
java -jar selenium-server-standalone- 2.53.1.jar -role webdriver -nodeConfig node.json
参数:
role参数:webdriver表示Node节点的名字
nodeConfig :node各种配置的json文件路径。node.json与jar包在同一个文件夹中
执行后,如下图所示:
5、在访问Hub地址,http://172.16.231.45:4446/grid/console,验证Node节点是否已经注册成功,如下图所示:
6、编写分布式测试脚本
第一种方式:指定Node节点
DesiredCapabilities dc = DesiredCapabilities.chrome();
driver=newRemoteWebDriver(newURL("http://172.16.231.45:8888/wd/hub"),dc);
第二种方式:指定Hub地址,由Hub分发
DesiredCapabilities dc = DesiredCapabilities.chrome();
driver=newRemoteWebDriver(newURL("http://172.16.231.45:4446/wd/hub"),dc);
注意事项:
new UR中的地址,必须加上"/wd/hub"
第一种方式,测试用例只用在相应的Node节点计算机上执行
第二种方式,有Hub根据每个Node节点浏览器版本及最大并发量分配测试用例