📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
Selenium Grid 是 Selenium 家族中的关键一员,是一款用于分布式运行测试用例的工具。通过它,测试人员可以在不同设备、不同操作系统、不同浏览器、不同浏览器版本上执行测试用例,特别适合大规模地测试。
Selenium Grid 最新版本已经迭代到 4.x 了。下图是 Selenium Grid 4 (本文后续将简称 Grid)的运行原理图。
图片来源 Selenium 官方文档(https://www.selenium.dev/documentation/grid/components/),读者也可进入官方文档(https://www.selenium.dev/documentation/grid/)了解更多内容。
Grid主要由六个组件组成:路由器(Router)、分发器(Distributor)、会话映射(Session Map)、新会话队列(New Session Queue)、节点(Node)和事件总线(Event Bus)。
当测试人员(Client)向Grid发送执行测试用例的命令后,路由器首先接收请求,如果是一个已经存在的会话则进入会话映射查找会话运行所在的节点 ID,并将请求直接转发给节点,如果是一个新会话请求则会转发给新会话队列;新会话队列按先进先出的顺序保存所有新会话请求;分发器会轮询新会话队列查找未决的新会话请求,然后找到合适节点并创建会话。
会话创建后,分发器将会话 ID 与对应节点的关系存储在会话映射。事件总线则是节点、分发器、新会话队列和会话映射之间的通信路径。Grid 的大部分内部通信都是通过消息进行的,避免了频繁发送 HTTP 请求。
了解了Grid的原理,下面将分别介绍多设备、Docker 和 Kubernetes 环境下的部署,这三种部署方式也是技术的发展轨迹。
多设备部署
多设备部署是在不同设备上通过Java命令配置Grid工具,这也是最早的一种部署方式:
1、环境准备
Selenium Grid 是基于 Java 开发的,所以每个设备节点上都需要安装 Java 并配置环境变量,在此需要注意 Java 版本与 Grid 版本相匹配。
进入官方下载网站(https://www.selenium.dev/downloads/)下载 selenium-server 的 jar 包,并上传至每个设备节点。
获取所有节点 IP信息,并规划好 Hub节点和 Node 节点。一台设备可以同时为 Hub 节点和多个 Node 节点。例如笔者准备的设备信息如下:
2、配置 Hub 节点
在命令行工具中输入如下命令启动 Hub 节点:
java -jar selenium-server-xxx.jar hub -p 4444
-
selenium-server-xxx.jar 为下载的 jar 包文件。
-
hub 表示启动的角色 hub。
-
-p 4444 表示指定端口为 4444,4444 为默认端口,此参数可忽略不写。
执行截图如下所示:
初始化完成后,可通过 Hub 机 IP 访问 Console 页面。访问地址:http://{IP}:4444,从启动的输出日志中也可以看到访问地址,如上图就是 http://192.168.10.8:4444。
访问页面截图如下图所示:
3、配置 Node 节点
在命令行工具中输入如下命令注册 Node 节点:
java -jar /Users/ydj/selenium-server-xxx.jar node --hub http://{IP}:4444 -p 5555
-
selenium-server-xxx.jar 为下载的 jar 包文件。
-
node 表示启动的角色 node。
-
-port 5555 表示指定端口为 5555, 5555 为默认端口,此参数可忽略不写。
-
-hub http://{IP}:4444 用于指定注册的 Hub 地址,如果 Hub 节点和 Node 节点在同一设备上,此参数可忽略不写。
执行截图如下所示:
当出现“Node has been added”的提示就表示 Node 节点注册成功。再次访问 Hub 地址 http://{IP}:4444 可以看到已经成功注册一个 Node 节点,如下截图所示:
通过上面命令可继续注册 Node 节点。
Docker 部署
Docker 是一个开源的容器化平台,可以将应用程序及其所有依赖项打包在一个独立、可移植的容器中。它通过利用容器技术来实现应用程序的快速部署、可扩展性和跨平台性。Docker 部署是一种虚拟化的部署,可以使多台设备上程序运行的环境保持一致。采用 Docker 技术比在多台设备或虚拟机上分批部署更加轻便、快速。
下面就来开始 Docker 上部署 Grid。
1、环境准备
设备机器上需要安装 Docker。
关于 Docker 的安装,基本使用可参考51讲堂中《学会Docker,测试环境轻松搞定》(http://quan.51testing.com/pcQuan/lecture/159)一文。
本次我们采用 docker-compose 命令运行 YAML 文件来部署。
2、下载 Grid 相关镜像
将需要的 hub 镜像和 node 镜像下载到本地,如果本地没有对应的镜像和标签,docker-compose 运行时则会从远程仓库拉取。
使用如下命令拉取 selenium/hub 镜像,如果没有特殊要求,我们拉取最新版本 latest 镜像就行。
docker pull selenium/hub:latest
操作截图如下所示:
接着再使用如下命令拉取 selenium/node-chrome 镜像,不同浏览器有不同的 Node 镜像,在此以 Chrome 为例。
docker pull selenium/node-chrome:latest
hub 和 node 镜像都获取成功后,使用命令 docker images selenium/* 查看本地所有 selenium 相关的镜像,截图如下:
3、构造 docker-compose.yaml 文件文件
Docker Compose 是用于定义和运行多容器应用程序的工具,Compose 简化了对整个应用程序堆栈的控制,让您能够在单个易于理解的 yaml 配置文件中轻松管理服务、网络和卷。然后,只需一个命令,即可创建并启动所有服务 从您的配置文件中。
创建一个 docker-compose.yaml 文件,内容如下:
services:
hub: # hub 容器
image: selenium/hub:latest
container_name: selenium-hub
ports:
- "4444:4444"
networks:
- net
chrome1: # 第一个 chrome 节点容器
image: selenium/node-chrome:latest
depends_on:
- hub
environment:
- SE_EVENT_BUS_HOST=hub
- SE_EVENT_BUS_PORT=4444
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
networks:
- net
chrome2: # 第二个 chrome 节点容器
image: selenium/node-chrome:latest
depends_on:
- hub
environment:
- SE_EVENT_BUS_HOST=hub
- SE_EVENT_BUS_PORT=4444
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
networks:
- net
networks:
net:
上面文件中,我们定义了三个容器,一个 hub 容器和两个 chrome 节点容器,如果需要注册更多节点,则参考上面节点内容复制继续添加即可。
下面对上面文件中关键字段做以下说明:
-
depends_on:定义容器启动顺序,上文件中 depends_on/hub 表示 hub 节点启动后再启动 chrome 节点。
-
SE_EVENT_BUS_HOST:hub 节点 IP 地址,在 docker-compose 可直接写 hub 名称。
-
SE_EVENT_BUS_PORT:hub 节点端口,即Selenium Grid 控制台访问端口。
-
SE_EVENT_BUS_PUBLISH_PORT:hub节点的事件总线发布事件的端口。
-
SE_EVENT_BUS_SUBSCRIBE_PORT:hub节点的组件订阅事件的端口。
-
networks:通常应用于集群服务,可以使不同应用程序在相同的网络中运行。
注意:Hub 节点在启动时,如果没有指定控制台访问端口、总线发布事件的端口、订阅事件的端口,则默认为4444、4442、4443。
4、启动容器
使用如下命令启动 docker-compose.yaml 中的服务。
docker-compose up -d
docker-compose up -d 命令是用来启动Docker Compose项目中定义的服务的,并且让这些服务在后台以守护进程(daemon)模式运行。
-
up: 根据compose文件中的定义启动或重新创建服务。
-
-d: 标志位参数,表示“detached mode”,即后台运行模式。
操作截图如下所示:
从输出日志中可以看到四条有效信息,网络创建成功,容器 selenium-hub 和 两个 chrome node 也启动成功。
在命令行工具中使用命令 docker ps 命令也可 查看启动的容器,如下图所示:
容器创建成功后,便可在本地通过 http://localhost:4444 访问 Grid 页面。如果设置了域名也可通过域名访问。
截图如下:
从截图中看到,一共注册了两个 Node 节点,节点中只有一个 Chrome 浏览器,与 docker-compose.yaml 文件中的编排相匹配。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】