并行与分片是什么
Playwright 并行分两个层次:单机多 worker(进程级并行,默认按测试文件分配)与跨机分片(--shard=i/N 把用例集切给 N 台 CI 机器)。文件级并行的前提是用例互相独立;分片把大回归按时间预算横扩,各片结束后用 blob 报告合并成完整结果。并行度不是越高越好,机器核数与环境容量才是真正的上游限制。
基本信息
| 单机并行 | workers 配置或 --workers 指定进程数 |
|---|---|
| 并行粒度 | 默认按文件;fullyParallel 可细化到用例级 |
| 跨机分片 | --shard=2/4 表示共 4 片中的第 2 片 |
| 报告合并 | --reporter=blob 输出,再用 merge-reports 汇总 |
| 隔离 | 每个 worker 独立浏览器上下文;数据与账号要同样隔离 |
| 平衡 | 分片按时长尽量均匀,避免总时长等于最大片 |
命令示例
命令示例
npx playwright test --workers=4 # 单机 4 进程并行
npx playwright test --shard=1/3 --reporter=blob # CI 分片 1,输出 blob
npx playwright merge-reports --reporter=html ./blob-report # 合并各片报告典型使用场景
- 回归时长压缩:分片横扩到多台机器并行跑
- PR 快跑:少量 worker 快速反馈,避免压垮测试环境
- 夜间全量:多 worker 加多分片拉满吞吐
- 慢用例定位:并行时间线上看哪些文件是长尾
- 成本优化:按机器核数调 worker 数,避免过度并行
- 分片隔离设计:数据库与账号按片分区,防止跨片共享状态
模式与风险
| 模式 | 粒度 | 风险 |
|---|---|---|
| 默认并行 | 文件级 | 同文件串行,隔离相对好做 |
| fullyParallel | 用例级 | 共享状态最容易翻车 |
| 分片 | 跨机 | 分片不均则总时长被最慢片拖住 |
| blob 合并 | 报告层 | 不合并则各片结果散落看不见全貌 |
并行引入的失败先怀疑隔离:数据、账号、端口、浏览器 profile 是否真正互不共享,再去怀疑功能缺陷。
分片前先看文件耗时分布:大文件会让某片拖尾,考虑拆分大文件或按历史时长做不均衡分片。
worker 数不要超过机器可用核数:上下文切换与资源争抢会让总时长不降反升,环境服务端也可能先被打崩。