Selenium Grid 是什么
Selenium Grid 把测试分发到多台机器与浏览器节点上并行执行:本地用 Docker 即可起一套 hub 加 node 的拓扑,适合浏览器矩阵与跨平台组合。代价是环境维护:节点镜像版本、容量调度与失败重试都要预先设计,否则并行度上去了,稳定性反而下降。
基本信息
| 架构 | Hub 分发、Node 执行(新版合并为统一 server) |
|---|---|
| 本地起步 | 容器运行 standalone 模式即可单机验证 |
| 远程接入 | webdriver.Remote 指向 Grid 地址与浏览器选项 |
| 并行控制 | 按节点容量设置并发度,避免资源争抢 |
| 镜像管理 | 固定浏览器与驱动版本,保证结果可比 |
| 失败处理 | 超时与节点故障可重试,并集中收集证据 |
| 结果收集 | 视频、截图与日志统一回传存储 |
起一套 Grid
起一套 Grid
docker run -d -p 4444:4444 --name selenium selenium/standalone-chrome
# 用例指向 Grid:
# webdriver.Remote("http://localhost:4444", options=opts)
# 并行度先按节点数减一,给调度留余量排队与失败原因
| 现象 | 原因 | 处理 |
|---|---|---|
| 无可用节点 | 并发超过节点容量 | 降并发或扩容 |
| 会话启动超时 | 镜像拉取慢或节点繁忙 | 预热镜像、错峰调度 |
| 浏览器行为漂移 | 镜像标签未固定 | 固定镜像版本 |
| 僵尸会话 | 节点未清理或进程泄漏 | 定期重启并清理 |
| 结果收集不全 | 视频日志未集中存放 | 统一回传存储 |
典型使用场景
- 浏览器矩阵:多浏览器多版本并行回归。
- 跨平台组合:Windows、macOS、Linux 浏览器验证。
- 本地加速:把长回归切分到多节点缩短时长。
- 旧浏览器验证:为特定版本单独保留节点。
- CI 集成:流水线按需拉起 Grid 执行。
- 容量评估:观察节点利用率与排队时长再扩容。
- 镜像预热:提前拉取镜像,避免首次调度卡在拉取上。
- 集群监控:观察排队时长与利用率,按数据扩容。
用例层与节点层并行度叠加会造成资源争抢,调度前先核对节点容量。
节点镜像不固定版本,浏览器升级后脚本行为会漂移。
Grid 解决跨浏览器组合,不解决单浏览器提速:后者优先无头与分片方案。