← 中文资源

简体中文版本

用分片与 Worker 并行化 Playwright E2E

把 E2E 用例切分到多台 CI 机器与进程内 worker,隔离每个 worker 的浏览器上下文,把总时长压进预算。

阅读英文原文

目标

Playwright 沿两个轴并行:worker 在单机内并发跑 spec 文件,shard 把套件切到多台机器。大多数长套件两个都需要。前提对两者相同:测试必须拥有自己的状态,因为任何被共享的 fixture 在并发的那一刻都变成竞态。

步骤要点

  1. 配置里先开 workers=4 与 fullyParallel,单机内浏览器上下文级并发即可吃掉大半时长。
  2. CI matrix 以 –shard=N/4 切到四台机器,叠加机器内 worker。
  3. 每个测试经 API 建独立用户并用自动登录令牌进入,并发不可能在共享 fixture 上相撞。
  4. 统计各分片时长,彼此只差几秒才算没有掉队者定义总时长。
  5. trace 设 on-first-retry、retries=1:失败才留全量轨迹,存储成本可控。

排错提示

只在并行时失败说明共享了用户或单例资源,改为 API 建临时实体;并发浏览器打饱和 staging 就封总并发:worker×shard 必须匹配环境容量,可加机器减 worker 或扩环境;某分片总是最慢,按时长记录重新切分重型 feature 文件而不是按字母序。

适用边界

并行对目标环境成倍加压,扩分片前先预算容量;视频与 trace 工件随并行成倍增长,只对失败保留才可持续。

代码示例

export default defineConfig({
  workers: process.env.CI ? 4 : 2,
  fullyParallel: true,
  use: { trace: "on-first-retry" },
});

// CI matrix
npx playwright test --shard=${{ matrix.shard }}/4