用码头工人搭建硒网格分布式环境实践之路

  

最近需要测试放大视频会议,同时模拟100个人加入会议。经过了解,变焦提供了直接通过url链接加入会议的方式(只能通过chrome浏览器或者火狐浏览器,因为用的协议是webrtc)。

  

顺着这个思路考虑可以通过硒自动化,同时启动多个浏览器进程,每个进程代表一个视频会议用户,达到模拟多方会议的效果,不过有以下两个难点:

  
      <李>需要多个chrome浏览器进程同时存活,在电脑上启动一个chrome浏览器进程差不多要消耗220左右。   <李>视频会议的音频和视频源的问题。   
  

针对视频会议的音频和视频源的问题,chrome浏览器有比较好的支持,在硒脚本中初始化铬浏览器的参数中,只需要加入如下配置:

        chrome_options.add_argument (”——use-fake-ui-for-media-stream”)   chrome_options.add_argument (”——use-fake-device-for-media-stream”)      

就能在加入视频会议之后,使用虚拟的视频和音频。不过有个问题需要考虑,这个虚拟视频和真实的视频会议中的视频质量看上去是有差距的,会不会对测试结果造成影响,我们这里暂时不讨论这个话题。

  

现在唯一比较头疼的是怎么实现100个chrome浏览器进程,可能你会觉得,这不就是资源问题吗?加服务器不就搞定了? !但是假如有了服务器资源之后,怎么做任务调度呢?好在有硒网格,它是硒的三大组件,专门用来执行分布式测试。

  

于是基于硒网格设计了个测试方案:

  
      <李>将某台服务器作为中心,也就是大师李   <李>将剩下的机器作为节点,注册到中心机器。   <李>本地采用多进程执行硒自动化脚本(我使用python语言实现的)。   
  

按照上面的设计思路,理论上是能够模拟出100人同时加入会议的。接下来我们就正式开始用码头工人搭建硒网格分布式环境的探索之路。

  

  

其实,最开始我是直接使用jar包启动节点的,起几个节点还能接受,但是节点多了之后会特别麻烦,比如:想重启下节点,则需要手动全部杀死掉,然后再一个个启动。

  

只要是手动重复的工作,就能脚本化。于是我写了两个shell脚本,一个脚本是根据传参启动对应数量的节点;另一个脚本是将所有的节点进程全部杀死掉。主要脚本如下图所示:

  

用码头工人搭建硒网格分布式环境实践之路

  

虽然用脚本也能轻松的执行,但还是不方便,首先启动节点后,会增加好java进多程,并且没办法查看单个节点的日志,因为所有节点的日志都同时在控制台打印。于是考虑用码头工人来管理Selenium grid节点。

  

  

在github上有现成的镜像:https://github.com/SeleniumHQ/docker-selenium。然后说明文档中也列出了所有可用的镜像名称,因为我主要使用chrome浏览器,所有安装了:硒/中心/node-chrome硒,硒/node-chrome-debug三个镜像,其中硒/node-chrome-debug镜像会启动一个VNC服务器,在脚本执行过程中,本地可以连上的VNC服务器,通过界面查看服务器的脚本执行情况。使用命令:

        码头工人把美元硒/中心   码头工人拉硒/node-chrome美元   码头工人把美元硒/node-chrome-debug      

启动中心的命令如下:

        码头工人运行- d - p 4444:4444 - e GRID_MAX_SESSION=100美元——名字中心硒/中心      

启动本地节点(枢纽和节点在一台机器上)的命令如下:

        码头工人美元运行- d - p 5555:5555 - e NODE_MAX_INSTANCES=5 - e NODE_MAX_SESSION=5 - shm-size=2 g -链接中心:中心——名字node1硒/node-chrome      

启动远端节点(枢纽和节点不在一台机器上)的命令如下:

        码头工人运行- d - p端口:5555美元- e HUB_HOST=remote_ip - e HUB_PORT=remote_port - e REMOTE_HOST=http://ip:港口- e NODE_MAX_INSTANCES=5 - e NODE_MAX_SESSION=5——shm-size=2 g的名字node1硒/node-chrome      

这里需要注意,网上很多教程提供的启动命令都是枢纽和节点在一台机器上,假如需要枢纽和节点在不同的机器上,按照网上的教程,虽然启动不会报的错,但是节点和中心之间的网络是不通的。

  

不过直接使用码头工人命令虽然可以单独查看单个节点的日志,但是却和使用jar包的方式面对一样的问题:启动多个节点,非常不方便,需要手动执行多次命令。有没有更好的方案呢?当然有,可以使用docker-compose对码头工人容器进行整合。

用码头工人搭建硒网格分布式环境实践之路