作者 | 汪欢,单位:中国移动智慧家庭运营中心
Labs 导读
分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。如上,是分布式系统的概念,在测试系统,也有分布式的应用场景,今天向大家介绍一下基于selenium的分布式测试,Selenium-Grid。
Part 01 什么是Selenium-Grid
Selenium Grid是Selenium的三大组件之一,它的作用就是允许我们在多台计算机上并行运行测试, 并集中管理不同的浏览器版本和浏览器配置。
Part 02 Selenium-Grid的使用场景
- 支持在多执行环境进行测试
Selenium Grid支持在多个物理机或者虚拟机(跨平台、跨浏览器)上执行,比如测试节点1为物理机,操作系统为Windows7,浏览器为Google Chrome,测试节点2为物理机,操作系统为Linux,浏览器为Firefox,测试节点3为基于Dockers的虚拟化环境,浏览器为IE8。Selenium-Grid对这三个节点均可以调用。
- 结合多线程技术,在多台设备并行进行测试,可以有效地减少测试时间
Selenium Grid本身并不支持多线程并发执行,但是可以结合多线程技术,实现测试并发执行。
Part 03 Selenium-Grid的结构
Grid由一个中心(hub)和一到多个节点(Node)组成。
其中,hub节点作为管理节点,用来管理各个代理节点的注册和状态信息,并且接收远程客户端代码请求调用,然后把请求的命令再转发给代理代点来执行。
Node节点就是实际执行任务的节点,即浏览器所在的节点,它的主要作用就是注册到hub节点,并接收hub节点的请求及执行测试。
Part 04 环境搭建
预置配置
Hub和Node节点PC需要部署java环境,且Hub节点与Node节点处于同一个局域网中,且网络互通,并将selenium grid的jar包下载到PC,下载地址:https://cdn.npm.taobao.org/dist/selenium/3.9/selenium-server-standalone-3.9.1.jar,
配置Hub节点
以Windows系统为例,进入jar包所在目录,输入以下命令:
- role:表示此节点为hub节点
- port:表示Hub通过此接口与Node节点进行交互
此时,我们在192.168.1.3这台PC上创建了Hub节点,我们登陆一下hub节点,查看一下当前Selenium Grid整体的一个状态,打开http://192.168.1.3:4455/这个页面,可以看到右下角有个Console链接。
点击console,可以自动跳转到selenium Grid的控制页面,显示如下:
因其他Node节点还未配置,故只能查看当前配置项。
配置Node节点
配置节点一:
同样的,我们以Windows系统为例,进入jar包所在目录,输入以下命令:
命令输入完成后,可以看到,当前设备已注册成功,我们再返回到Hub节点,刷新http://192.168.1.3:4455/grid/console页面,查看Node节点是否注册成功。
此时,我们可以看到一个IP为192.168.147.1的设备已成功注册到Hub节点,且这个设备上有三种浏览器,分别为firefox、IE、Chrome。
配置节点二:
同样的,第二台PC,进入jar包所在目录,输入以下命令:
Node节点二,显示已注册成功,此时我们登陆Hub,查看注册情况:
我们在Hub节点可以看到两个Node节点。
Part 05 验证效果
现在我们通过Python来验证以下selenium grid的神奇之处,我们在Hub节点编写一个自动化脚本,通过在Hub节点来下发任务,由Node节点来实现具体测试。测试的内容为让Node1节点通过Firefox浏览器打开百度网站。
Hub节点上相应的Python脚本及执行结果如下:
Node1节点上命令行的显示执行的任务如下:
就此,整个完整的小测试已完成,你是不是想自己尝试操作一遍?