SuperAPI AI 工具集

playwright-test-data-isolation

数据与分析

查看项目

更新于 10-16 05:46

技能介绍

用途:当 Playwright 测试运行在共享 QA/Staging 环境(共享数据库、共享测试账号、并行 CI 与本地运行)并因数据碰撞、跨测试干扰或不安全清理导致不稳定时,使用该技能让测试并行安全且运维安全。

核心契约:每个测试须创建自己需要的实体,只修改自己创建的实体,把共享基线(账号、工作空间、组织设置)视为只读,清理时按测试中捕获的精确 ID 删除,禁止宽泛过滤;无法满足该契约的测试移入串行套件。

关键护栏:共享用户与工作空间仅作只读容器;并行套件不得修改共享工作空间设置、成员、计费或全局开关;测试创建的记录加唯一前缀(如 e2e-<run>-<worker>-<uuid>);按精确 ID 删除,绝不在 teardown 执行宽泛删除;定时清理仅作备份而非主要手段。

推荐架构:共享账号仅用于认证,可变数据按命名空间隔离;清理确定、基于 ID、逆序执行;共享状态变更测试串行化;定时任务清理超过阈值的陈旧 e2e-* 产物。账号策略优先每 worker 一账号,其次共享账号仅登录、子数据归测试所有,避免并行修改顶层账号/工作空间设置。

实现要点:用 setup project 复用共享账号的 storageState;通过 base.extend 定义 namespace 与 trackCleanup fixture(namespace 组合 runId、project、workerIndex 与 uuid,清理逆序执行并捕获错误);在共享容器内创建子资源并用 request 按 ID 删除;用 test.describe.configure({ mode: "serial" }) 隔离真正修改共享状态的测试;在 playwright.config.ts 增加 cleanup project,用 workers: 1、retries: 0 运行陈旧数据清理。冲突排查时收集各失败测试的命名空间、workerIndex、项目名、已创建 ID 与被改动的共享实体;重试后失败消失应视为共享状态耦合信号。

反模式:并行测试写同一共享实体、跨文件复用可变 fixture、用宽泛过滤清理、依赖执行顺序、用重试掩盖碰撞、把夜间清理当作唯一清理。

落地顺序:添加 fixture,迁移易变测试为自建自清理,添加清理项目与计划,将共享状态测试转串行,碰撞消失后再增加 worker。成功标准:并行不再碰撞、teardown 不触碰非测试数据、数据相关 flake 下降、共享环境对人工 QA 与 CI 保持稳定。

限制:本技能不依赖特定平台;如团队使用 Stably,可用 npx stably test 作为 Playwright 兼容运行器,并借其环境与云 worker,但隔离契约与运行器无关。具体 API 路径、环境变量、凭据与调度细节需按各自项目调整,资料未提供通用默认值。