Selenium Grid是Selenium套件的一部分,提供了在多台机器,不同浏览器,跨平台运行测试的能力。在web中要做好自动化测试,selenium是非常适配的选择。
一、Selenium Grid 简介
Selenium Grid是Selenium套件的一部分,提供了在多台机器,不同浏览器,跨平台运行测试的能力。在web中要做好自动化测试,selenium是非常适配的选择。
1.1 简介
Selenium Grid是Selenium套件的一部分,提供了在多台机器,不同浏览器,跨平台运行测试的能力。
grid组件
grid由路由器router、分发器distributor、会话映射session map、新会话队列new session queue、节点node、事件总线event bus组成。
架构如下图所示:
路由器router
作用:grid的入口点,接收所有外部请求,转发给正确的组件。
功能:
- 处理新的会话请求,转发到新会话队列。
- 查询会话映射,转发请求到正确节点
- 平衡负载
分发器distributor
作用:
- 注册跟踪所有的node以及其功能
- 查询新会话队列并处理任何待处理的新会话请求。
功能: - 注册节点跟踪其功能
- 查询新会话队列,处理新会话请求,分配给对应节点
- 通过gridmodel跟踪节点功能
会话映射session map
作用:
- 保存会话id和节点的关系
- 路由器在会话映射中查询确认会话id与关联节点。
新会话队列new session queue
作用:
- 先进先出顺序保存新会话请求
- 可配置请求超时和重试间隔
功能: - 新会话请求超时的会被拒绝和删除
- 轮训队列,方便将请求分配给可用的节点插槽
- 节点插槽决定了一个节点可以同时运行多少个测试用例
节点node
作用:
- 一个grid可以包含多个node,Node管理它所在机器上可用浏览器的插槽
功能: - Node通过事件总线向分发器注册自己,报告自己的配置
- 自动注册可用的浏览器驱动
- 创建浏览器插槽,执行接收到的命令
时间总线event bus
作用:
- 充当各组件之间的通信路径
功能: - 处理节点注册事件和其他组件内部通信
- 通过消息进行通信,避免http通信消耗
二、docker部署hub&nodes
selenium的官方docker hub提供了hub,node-chrome,node-firefox节点
https://hub.docker.com/r/selenium/hub
https://hub.docker.com/r/selenium/node-chrome
https://hub.docker.com/r/selenium/node-firefox
如果遇到网络问题,需要配置docker镜像,请点击这里查看docker篇3.3小节
我们先看看怎么镜像标签怎么看解读
hub标签:selenium/hub-<Major>.<Minor>.<Patch>-<YYYYMMDD>
1 | Selenium Server 4.9.0 |
node-chrome标签:selenium/node-chrome-<browserVersion>-<browserDriver>-<browserDriverVersion>-<Major>.<Minor>.<Patch>-<YYYYMMDD>
其他浏览器同理,作者只是按照个人习惯会挑完整的标签,这个不强制
1 | Chrome 112.0 |
创建docker网络启动镜像
docker创建网络,hub和nodes基于这个网络进行启动
1 | $ sudo docker network create selenium-grid-network |
启动hub
1 | $ sudo docker run -d \ |
启动node-chrome容器
1 | $ sudo docker run -d --net selenium-grid-network -e SE_EVENT_BUS_HOST=selenium-hub \ |
启动node-firefox容器
1 | $ sudo docker run -d --net selenium-grid-network --shm-size="1g" \ |
检查一下容器运行情况
1 | $ sudo docker ps -a |
检查grid的ui页面,se给我们的grid提供了ui页面,作者搭建的时候是在虚拟机中的docker.
作者本地linux虚拟机地址是192.168.174.128,看官们根据自己的实际地址进行测试。在虚拟机中搭建docker,再基于docker搭建selenium grid是为了模拟服务器搭建
只要打开192.168.174.128:4444就能进入到se grid管理页面
三、客户端编写代码与测试
基于上一篇的python嵌入式开发环境搭建,准备好基础环境之后,我们要安装selenium相关的库了。
安装selenium
1 | $ cd path/to/python-3.13.2-embed-amd64 |
code/_main_.py
1 | from selenium import webdriver |
按下ctrl + f5执行代码,大概过了6s,就看到终端打印了baidu首页的title
1 | E:\test_learning\selenium_test> e:; cd 'e:\test_learning\selenium_test'; & 'e:\test_learning\selenium_test\python-3.13.2-embed-amd64\python.exe' 'c:\Users\89504\.vscode\extensions\ms-python.debugpy-2025.0.1-win32-x64\bundled\libs\debugpy\launcher' '5234' '--' 'E:\test_learning\selenium_test/code/__main__.py' |
参考资料:
https://www.selenium.dev/zh-cn/documentation/grid/ grid功能
https://blog.csdn.net/TestLiChangAn/article/details/137156566 grid介绍
https://www.oryoy.com/news/docker-huan-jing-xia-kuai-su-da-jian-selenium-zi-dong-hua-ce-shi-fu-wu-qi-shi-jian-zhi-nan.html grid搭建
https://blog.csdn.net/u013948010/article/details/78539215 测试用例参考
https://hub.docker.com/u/selenium
https://hub.docker.com/r/selenium/hub
https://hub.docker.com/r/selenium/node-chrome
https://hub.docker.com/r/selenium/node-firefox
https://github.com/SeleniumHQ/docker-selenium/blob/trunk/ENV_VARIABLES.md 环境变量
https://github.com/SeleniumHQ/seleniumhq.github.io/blob/trunk/examples/python/tests/drivers/test_remote_webdriver.py#L68 python se远程