Previous
Day 27 · Accessibility and User-Behavior Testing
Next
Day 29 · Framework Design and Team Standards
进阶掌握
Day 2860-120 minutesPlaywright QA hands-on drill

Day 28 - Test Data Management and Environment Strategy

今日目标

  • 掌握测试数据准备、隔离和清理思路。
  • 理解环境稳定性对自动化的影响。

学习时间安排(60–120 分钟)

时间模块做什么
0-20 分钟核心概念与词汇读概念表,重点理解数据隔离和清理策略。
20-45 分钟学习材料阅读读测试数据与环境的实践文章(官方文档之外)。
45-75 分钟实操练习为业务流程设计并落地数据策略。
75-105 分钟示例代码改写用 API 动态创建 + 清理改造一条数据依赖测试。
105-120 分钟复盘与作业完成测试数据管理方案,完成今日问题。

核心概念与词汇

English中文场景用法
test data测试数据Use it when you describe the data a test needs to run.
data isolation数据隔离Use it when each test owns data that no other test touches.
data cleanup数据清理Use it when you remove test data after or before a run.
data factory数据工厂Use it when you generate valid, realistic data on demand.
fixture file数据夹具文件Use it when static data lives in JSON or TypeScript files.
environment测试环境Use it when you distinguish dev, test, staging, and prod.
seed data预置数据Use it when the environment starts with reference data.
unique prefix唯一前缀Use it when names like auto_test_20260814_xxx avoid collisions.
leftover data残留数据Use it when failed tests leave data that breaks future runs.
write operation写操作Use it when risky mutations must be disabled in some environments.

学习材料

  • 必读:[Playwright 官方 best practices](https://playwright.dev/docs/best-practices) 中关于测试数据的建议
  • 必读:[API testing](https://playwright.dev/docs/api-testing) 中用 API 准备数据的部分(复习 Day 17)
  • 选读:团队内部的测试数据规范文档(如果有)

重点理解

测试数据来源:

  • 固定测试账号。
  • API 动态创建。
  • 数据库预置。
  • Mock 数据。
  • Fixture 文件。
  • 随机数据。

策略:

  • 每条测试尽量独立。
  • 数据要可重复、可清理。
  • 避免依赖线上真实用户数据。
  • 区分 dev、test、staging、prod。
  • 高风险环境禁用写操作。
  • 使用唯一前缀避免冲突,例如 auto_test_yyyyMMdd_xxx

实操步骤

为业务流程设计测试数据策略:

## 测试数据策略

- 数据创建方式:
- 数据命名规则:
- 数据清理方式:
- 失败后残留处理:
- 多环境差异:
- 风险控制:

示例代码

import { test, expect } from '@playwright/test';

const uniqueName = `auto_test_order_${Date.now()}`;

test.beforeEach(async ({ request }) => {
  // 动态创建,保证唯一
  const res = await request.post('/api/orders', {
    data: { name: uniqueName, status: 'draft' },
  });
  expect(res.ok()).toBeTruthy();
});

test('edit order', async ({ page, request }) => {
  await page.goto('/orders');
  await page.getByRole('row').filter({ hasText: uniqueName })
    .getByRole('button', { name: 'Edit' }).click();
  await page.getByLabel('Status').selectOption('confirmed');
  await expect(page.getByText('Saved')).toBeVisible();
});

test.afterEach(async ({ request }) => {
  // 无论成败都尝试清理
  const list = await (await request.get('/api/orders?name=' + uniqueName)).json();
  for (const order of list) {
    await request.delete(`/api/orders/${order.id}`);
  }
});

常见坑

  • 固定测试数据被并行测试抢用,A 改了 B 断言失败。
  • 测试失败后数据残留,第二次运行因“已存在”而失败。
  • 在 prod 环境跑写操作测试,污染真实业务数据。
  • 随机数据没有记录,失败后无法复现现场。
  • 测试账号互相踢下线(单端登录),并行时登录态失效。

今日产出

  • 一份测试数据管理方案。
  • 一个动态创建并清理数据的测试。

今日问题

  1. 测试数据不稳定会导致什么问题?
  2. 为什么测试数据要可清理?
  3. API 创建数据和 UI 创建数据如何取舍?
  4. 如何避免多个并行测试抢同一条数据?
  5. 哪些环境不适合跑写操作测试?

复盘要点

  • 数据问题的典型症状:串行全绿、并行全红——这是数据隔离没做好。
  • 唯一的创建 + 兜底的清理(afterEach 容错执行)是数据管理的基本盘。
  • 环境红线要写进规范:prod 禁写、staging 谨慎、dev/test 放开。

AI 时代扩展:AI 辅助 Playwright 测试

新增概念

English中文
data strategy design数据策略设计
cleanup robustness清理健壮性
environment guardrails环境护栏

适用场景

让 AI 根据业务流程设计数据创建/命名/清理方案,或者审查现有测试的数据残留风险和并行冲突点。

可复用表达 / 提示词

我的测试需要创建订单并修改状态,请设计数据策略:创建方式、唯一命名、清理机制、失败兜底。
请审查我的测试数据使用,找出并行冲突、数据残留、环境误用三类风险。

追问加练

  • AI 建议 afterEach 里无条件 DELETE 所有同名数据,有什么风险?
  • 唯一命名用时间戳还是随机串?各自的利弊?
  • 哪些环境红线 AI 替你写进方案里,需要你亲自把关?

今日作业

  • 完成测试数据管理方案文档(6 项全填)。
  • 实现“动态创建 + afterEach 兜底清理”的测试并连跑 3 次。
  • 让 AI 审查你的方案,修正 1 个以上风险点。

自检清单

Previous
Day 27 · Accessibility and User-Behavior Testing
Next
Day 29 · Framework Design and Team Standards