web端自动化——Selenium Grid原理

 利用Selenium Grid可以在不同的主机上建立主节点(hub)和分支节点(node),可以使主节点上的测试用例在不同的分支节点上运行。
 对不同的节点来说,可以搭建不同的测试环境(操作系统、浏览器),从而得到一份测试用例在不同环境下的执行结果。 
Selenium Grid允许同时并行地、在不同的环境上运行多个测试任务。

Grid是用于设计帮助我们进行分布式测试的工具,其整个结构由一个hub主节点和若干node代理节点组成。hub用来管理各个代理节点的注册和状态信息,并且接收远程客户端代码的请求调用,

然后把请求的命令再转发给代理节点来执行。使用Grid远程执行测试的代码与直接调用Selenium Server是一样的,只是环境启动的方式不一样,需要同时启动一个hub和至少一个node。

两者的启动都使用selenium-server.jar可执行文件。



 java -jar selenium-server-standalone-3.141.0.jar -role hub

 java -jar selenium-server-standalone-3.141.0.jar -role node

上面的代码分别启动了一个主节点hub和一个子节点node,hub默认端口号为4444,想改,可以在 java -jar selenium-server-standalone-3.141.0.jar -role hub命令后面加上-port xxxx

node默认端口号为5555。

若是同一台主机上要启动多个node,则需要注意指定端口号,可以通过下面的 方式来启动多个node点节。一台测试机上可以启动多个node,前提是要保证不使用相同的端口号即可(当然不建议这样做,尽量避免不稳定因素)

 java -jar selenium-server-standalone-3.141.0.jar -role node -port 5555

java -jar selenium-server-standalone-3.141.0.jar -role node -port 5556

当你的测试用例需要验证的环境比较多时,可以并行地执行这些用例进而缩短测试总耗时。

并行的能力需要借助编程语言的多线程技术,Grid可以裉据用例中指定的平台配置信息把用例转发给符合匹配要求的测试代理。

例如,你的用例中指定了要在Linux上用Firefox版本进行测试,那么Grid会自动匹配注册信息为Linux且安装了Firefox的代理节点,如果匹配成功,则转发测试请求,如果匹配失败则拒绝请求。

注意:上面运行的启动node或hub可能会发生Error: Unable to access jarfile selenium-server-standalone-3.4.0.jar,

错误可能发生,当在启动一个Hub或node的时候。这意思是Java不能找到Selenium服务器的jar文件。

打开命令行,要cd到selenium-server-standalone-3.141.0.jar文件所在的目录,再运行这个命令,或者为这个jar指定显式的路径。

 1、启动主节点hub:

 2、启动子节点:

 


当所有测试机上的Selenium2环境搭建成功后,就可以开始启动Selenium-Grid2环境了。

首先启动一个hub,启动hub的机器可以不是测试机,任意一台机器有Java环境的机器都可以。这个是整个Selenium-Grid的中枢节点,所有的远程测试都会由经它后再被转发出去,然后在对应的测试机上执行测试。

然后启动测试代理node,测试代理必须在测试机上启动(即之前搭建了Selenium2环境的机器上),并且其注册的地址必须是hub所在的机器的ip和端口号。

最后当hub和所有的代理节点都启动成功后,可以通过浏览器查看当前Selenium-Grid的状态,直接访问地址http://localhost:4444/grid/console

可以看到页面显示了可以支持测试的代理节点的数量和类型,这里显示的数量和类型和你启动代理节点时所带的配置参数有关。

【当启动代理节点时其实就是一个注册过程;启动时所带的参数会被hub记住作为注册信息,所以页面中所看到的信息就是各代理节点注册时信息的汇总。】

如下图:

拓展:

如果你是跟hub同一台机器中添加node节点可以直接在控制台(终端)输入如下命令: (自己电脑添加主节点、子节点)

 java -jar selenium-server-standalone-3.141.0.jar -role hub   

 java -jar selenium-server-standalone-3.141.0.jar -role node  

如果你想在别的机器上添加node节点则控制台(终端)输入如下命令启动次节点服务:(把自己电脑作为主节点,另一台电脑机子作为子节点)

java -jar selenium-server-standalone-3.141.0.jar -role node -hub  http://ip:端口/grid/register

可以通过浏览器访问Grid的控制台:http://127.0.0.1:4444/grid/console (前提是通过cmd启动selenium server服务,否则提示服务器拒连接)

 中心默认使用的端口是 4444 。这是一个 TCP/IP 端口,被用于监听客户端,即自动化测试脚本到 Selenium-Grid 中心的连接。

>java -jar selenium-server-standalone-3.141.0.jar -role hub -port 4441

注意:

Selenium Grid虽然可以分布式执行测试用例,但它并不支持并行。

“分布式”和“并行”是两个完全不同的概念,分布式只负责将一个测试用例远程调用到不同的环境下执行;而“并行”强调“同时”执行多个任务。

原文地址:https://www.cnblogs.com/linxiu-0925/p/9948361.html