Skip to content

测试数据工厂模板

自测题

完成以下 3 道题目,检验你的学习成果

问题 1

测试数据生命周期管理包括哪些环节?

问题 2

测试之间数据隔离的常用方式有哪些?

问题 3

Builder 模式在测试数据工厂中的作用是什么?

模板使用说明

测试数据工厂是自动化测试的核心基础设施。好的数据工厂能让测试用例简洁、数据构造高效、测试之间互不干扰。这个模板帮你练习从零设计一套测试数据管理体系,涵盖数据模型定义、工厂类设计、数据生命周期管理等关键环节。

项目骨架

第一步:数据模型抽象

目标:定义测试中涉及的数据实体及其关系。

关键产出

  • 实体定义:用 dataclass 或 TypedDict 定义每个数据实体的结构。例如 User(id, username, email, role)、Order(id, user_id, items, total_amount, status)、Product(id, name, price, stock)。
  • 关系定义:明确实体间的关联关系。例如 Order 关联 User(一对多)、Order 关联 Product(多对多)。关系定义指导数据工厂的级联创建逻辑。
  • 约束定义:定义每个字段的约束条件。例如 email 必须符合格式、price 必须大于 0、status 必须是枚举值之一。约束用于数据生成时的校验。

代码结构示例

data_factory/
├── models/ # 数据模型定义
│ ├── user.py
│ ├── order.py
│ └── product.py
├── factories/ # 工厂类
│ ├── user_factory.py
│ ├── order_factory.py
│ └── product_factory.py
├── builders/ # Builder 模式
│ └── order_builder.py
└── cleanup/ # 数据清理
└── cleanup_manager.py

第二步:工厂类设计

目标:为每个数据实体设计工厂类,支持多种数据生成模式。

关键产出

  • 正向数据生成create_valid_user() 生成符合所有约束的正常数据。
  • 边界数据生成create_boundary_user() 生成边界场景数据(如用户名最长、邮箱格式临界)。
  • 异常数据生成create_invalid_user() 生成违反约束的数据(如邮箱格式错误、必填字段缺失)。
  • Builder 模式:对于复杂实体(如 Order),使用 Builder 模式逐步构建。OrderBuilder().with_user(user).add_item(product, qty=2).build()

设计原则

  • 每个工厂类只负责一个实体的数据生成。
  • 工厂方法命名清晰,体现生成的数据类型(create_admin_user vs create_normal_user)。
  • 支持参数覆盖,允许调用方指定特定字段值。

第三步:数据生命周期管理

目标:管理测试数据的创建、使用和清理全过程。

关键产出

  • 创建策略:预置数据(测试前批量创建,适合共享数据)、动态创建(测试中按需创建,适合隔离数据)、混合策略(基础数据预置,业务数据动态创建)。
  • 隔离策略:每个测试用例使用独立的数据(通过唯一前缀或独立数据库 schema),避免测试间相互干扰。
  • 清理策略:测试结束后清理创建的数据。方式包括:事务回滚(测试在事务中执行)、级联删除(记录创建的 ID,测试后批量删除)、环境重置(使用容器化环境,测试后销毁重建)。

面试表达要点:「数据管理的核心是隔离和清理。我通常用唯一前缀区分不同测试的数据,测试结束后通过记录的 ID 列表清理。对于复杂场景,会用事务回滚保证环境干净。」

第四步:多环境适配

目标:让数据工厂能在不同环境中正常工作。

关键产出

  • 环境配置:不同环境(dev/test/staging)的数据源不同,工厂通过配置切换。
  • 数据版本:数据模型随业务迭代变化,工厂支持多版本数据生成。通过版本号选择对应的生成逻辑。
  • 数据同步:测试环境的数据结构需要与生产保持同步。定期从生产导出脱敏数据作为测试基准数据。

练习建议

  1. 从简单实体开始:先实现 User 工厂,再逐步扩展到 Order、Product 等复杂实体。
  2. 练习关联数据创建:Order 需要关联 User 和 Product,练习级联创建逻辑。
  3. 练习数据清理:创建数据后验证清理是否彻底,数据库中没有残留。
  4. 练习参数化:工厂方法支持参数覆盖,验证灵活性。

面试高频问题

  • 「测试数据怎么管理?」→ 按实体定义模型 → 工厂类生成 → 生命周期管理(创建、隔离、清理)的流程回答。
  • 「测试之间数据怎么隔离?」→ 唯一前缀、独立 schema、事务回滚、容器化环境。
  • 「数据清理失败怎么办?」→ 记录创建日志、定期巡检、环境重置机制。
  • 「数据工厂怎么扩展?」→ 新增实体添加对应工厂类,新增场景添加对应工厂方法,保持接口一致。

自测题

完成以下 3 道题目,检验你的学习成果

问题 1

测试数据生命周期管理包括哪些环节?

问题 2

测试之间数据隔离的常用方式有哪些?

问题 3

Builder 模式在测试数据工厂中的作用是什么?