提示
在上一阶段,我们系统学习了 WebDriver 元素定位、常用事件操作,以及企业级规范 Page Object 和 Page Factory 设计模式。这些内容解决了 “单个浏览器、单台机器”如何编写稳定、可维护的自动化脚本 的问题。
但在实际企业项目中,往往需要同时在多浏览器、多平台、多机器上并行执行测试,以大幅提升测试效率、缩短回归时间。这时单机自动化就无法满足需求。

但是,我们只有一台PC,如何学习尼?
不用担心,一台电脑也可以实现多浏览器测试,只需要借助分布式功能测试技术即可。
因此,今天我们进入分布式功能测试的学习,重点掌握它的架构、部署、Hub 与 Node 机制,并学会编写可分布式运行的测试用例,为构建企业级大规模自动化测试平台打下基础。
1.分布式功能测试概述
前言
1 什么是分布式功能测试

分布式功能测试是指将自动化测试任务分发到多台机器、多个浏览器环境中并行执行的测试方式。
核心目的:
- 缩短测试执行时间
- 支持多平台、多浏览器兼容测试
- 提高测试资源利用率
- 满足敏捷、高频回归需求
2 为什么需要分布式测试
- 单机执行速度慢,大型项目回归耗时久
- 需要兼容 Chrome、Firefox、Edge 等多种浏览器
- 测试环境多,需要统一调度管理
- 团队共享自动化执行环境,避免资源浪费
3 基本架构(经典主从模式)

分布式功能测试典型架构分为两部分:
- Hub(中心节点/主节点)
- Node(执行节点/从节点)
结构关系:
- Hub 统一接收、管理、分发测试任务,监控 Node 状态,负载均衡,不执行用例,分配任务到空闲 Node,提供 Web 控制台查看集群信息,一个集群只有一个 Hub
- Node 注册到 Hub,接收指令并真正执行测试用例,真正启动浏览器、执行自动化脚本,向 Hub 注册自己,提供执行能力,可以部署在 Windows、Linux、macOS 等不同系统
- 测试脚本 → 发送给 Hub → Hub 转发给空闲 Node → Node 执行并返回结果
Node 部署难点:
- 驱动版本与浏览器匹配
- 网络互通(Hub 与 Node 能互相访问)
- 防火墙/端口开放问题
- 多浏览器环境配置
难点:Node 部署涉及环境、网络、驱动、权限等问题,是分布式搭建中最容易出错的环节。
2. 分布式测试环境搭建
前言
1. 准备资料
- selenium-server-standalone.jar // Hub 和 Node 都需要,启动程序
- 下载地址:https://selenium-release.storage.googleapis.com/index.html
- JDK,环境变量需要配置
- 浏览器 + 驱动


这里我们使用4.0版本,如果需要其他版本,只需要将path修改为对应版本即可
2.启动 Hub
将下载的jar包,放到非中文路径中,如下👇

在当前路径的cmd中,输入以下命令启动 Hub:👇
java -jar selenium-server-standalone-4.0.0-alpha-1.jar -role hub
控制台访问:
http://localhost:4444/grid/console
3.启动Nodee1(第一个执行节点)
java -jar selenium-server-standalone-4.0.0-alpha-1.jar -role node -hub http://localhost:4444/grid/register4.启动 Node2(第二个执行节点)
加一个端口:-port 5556 避免冲突
java -jar selenium-server-standalone-4.0.0-alpha-1.jar -role node -hub http://localhost:4444/grid/register -port 55565.查看是否成功
浏览器打开:
http://localhost:4444/grid/console你会看到:
✅ 2个 Node 都在线
代表 一台电脑成功模拟分布式集群


hub和node的控制台信息,当发送任务的时候,会自动分配到空闲的node上执行任务,对应的窗口会有信息提示。
3. 分布式测试实战
前言
下面是一个简单的分布式测试用例,它将测试任务分发到两个 Node 上并行执行,从而缩短测试执行时间。
package cn.yangeit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.net.URL;
public class DouBanDistributedTest {
public static void main(String[] args) throws Exception {
Thread.sleep(3000);
// ===================== 分布式固定写法 =====================
DesiredCapabilities cap = new DesiredCapabilities();
cap.setBrowserName("chrome"); // 要跑的浏览器
// 连接本机的 Hub
WebDriver driver = new RemoteWebDriver(
new URL("http://localhost:4444/wd/hub"), cap);
// ==========================================================
// 下面的业务代码 完全不变!
driver.manage().window().maximize();
driver.get("https://movie.douban.com/");
// 点击登录
driver.findElement(org.openqa.selenium.By.xpath("//*[@id=\"db-global-nav\"]/div/div[1]/a")).click();
Thread.sleep(2000);
// 输入账号
driver.findElement(org.openqa.selenium.By.className("global-phone-input-phone")).sendKeys("18684811161");
Thread.sleep(2000);
// 输入密码
driver.findElement(org.openqa.selenium.By.className("account-form-input")).sendKeys("1234");
Thread.sleep(2000);
// 点击登录按钮(你之前报错的多class,我已经修复)
driver.findElement(org.openqa.selenium.By.cssSelector(".btn.btn-phone.btn-active")).click();
System.out.println("分布式 豆瓣登录 执行成功!");
Thread.sleep(5000);
driver.quit();
}
}你可以将上面代码多复制几份,分别取名xx1,xx2然后快速启动每个测试用例,模拟批量测试,批量发布任务,然后观察每个node的控制台,你会发现,任务会自动分配到空闲的node上执行任务,对应的窗口会有信息提示。👇

4. 分布式测试总结
前言
回顾知识:
- 分布式功能测试架构把测试任务拆分成多个部分,由多台机器、多个节点共同执行,统一调度、统一结果汇总。
- 分布式功能测试部署多机环境搭建:主节点(调度)+ 从节点(执行),网络互通、环境一致。
- 分布式功能测试 Hub就是中央调度中心,负责接收任务、分配用例、管理执行节点、收集结果。
- 编写分布式功能测试用例用例要独立、无依赖、无顺序、可并发,不能互相干扰,方便多机同时跑。
- Selenium Grid多机测试属于典型的分布式功能测试。
- 整体采用Hub-Node主从架构,Hub作为中央调度节点,负责接收测试请求、管理执行节点、分配测试任务。
- 多台Node节点分布在不同机器或环境中,独立执行测试用例,实现任务的分散执行。
- 具备任务分发、多节点协同、集中管理、结果统一汇总的特点,完全符合分布式测试的架构与运行模式。
2. 分布式测试与并行计算测试的区别
核心侧重点不同
并行测试侧重执行方式,强调多个任务在同一时间段内同时运行,以提升执行速度。
分布式测试侧重系统架构,强调任务在多台独立节点上分布协作完成,关注调度、扩展与容错。运行环境要求不同
并行测试可单机实现(多线程、多进程),不一定需要多机环境。
分布式测试必须基于多机/多节点部署,任务分布在不同物理或虚拟节点。有无中心调度节点
并行测试可无统一调度中心,任务可独立并发执行。
分布式测试必须有中心调度节点(如Hub),统一管理节点、分配任务、收集结果。包含关系
分布式测试通常包含并行执行,但并行测试不一定是分布式测试。
