测试数据管理Skill test-data-management

测试数据管理技能专注于战略性地生成、管理和确保测试数据的隐私合规。关键词:测试数据、合成数据、PII、GDPR、匿名化、批量生成、事务隔离、性能测试、软件测试、隐私保护。用于支持软件测试过程,提高测试质量,避免法律风险,并优化测试数据基础设施。

测试 0 次安装 0 次浏览 更新于 3/9/2026

name: test-data-management description: “战略性测试数据生成、管理和隐私合规。在创建测试数据、处理个人身份信息(PII)、确保GDPR/CCPA合规,或为真实测试场景扩展数据生成时使用。” category: specialized-testing priority: high tokenEstimate: 1000 agents: [qe-test-data-architect, qe-test-executor, qe-security-scanner] implementation_status: optimized optimization_version: 1.0 last_optimized: 2025-12-02 dependencies: [] quick_reference_card: true tags: [test-data, faker, synthetic, gdpr, pii, anonymization, factories] trust_tier: 3 validation: schema_path: schemas/output.json validator_path: scripts/validate-config.json eval_path: evals/test-data-management.yaml


测试数据管理

<default_to_action> 当创建或管理测试数据时:

  1. 绝不直接使用生产环境的个人身份信息(PII)
  2. 使用faker库生成合成数据
  3. 如果使用生产数据,进行匿名化处理(掩码、哈希)
  4. 隔离测试数据(事务、每次测试清理)
  5. 通过批量生成扩展(每秒10k+条记录)

快速数据策略:

  • 单元测试:最小数据(仅够用)
  • 集成测试:真实数据(完整复杂性)
  • 性能测试:大量数据(10k+条记录)

关键成功因素:

  • 40%的测试失败源于数据不足
  • 个人身份信息违规可能导致GDPR罚款高达2000万欧元
  • 切勿在测试环境中存储生产环境的个人身份信息 </default_to_action>

快速参考卡

何时使用

  • 创建测试数据集
  • 处理敏感数据
  • 使用大量数据进行性能测试
  • GDPR/CCPA合规

数据策略

类型 何时使用 大小
最小 单元测试 1-10条记录
真实 集成测试 100-1000条记录
大量 性能测试 10k+条记录
边界情况 边界测试 针对性

隐私技术

技术 使用案例
合成 生成虚假数据(首选)
掩码 j***@example.com
哈希 不可逆伪名化
令牌化 可逆,带密钥

合成数据生成

import { faker } from '@faker-js/faker';

// 设置种子以确保可重复性
faker.seed(123);

function generateUser() {
  return {
    id: faker.string.uuid(),
    email: faker.internet.email(),
    firstName: faker.person.firstName(),
    lastName: faker.person.lastName(),
    phone: faker.phone.number(),
    address: {
      street: faker.location.streetAddress(),
      city: faker.location.city(),
      zip: faker.location.zipCode()
    },
    createdAt: faker.date.past()
  };
}

// 生成1000个用户
const users = Array.from({ length: 1000 }, generateUser);

测试数据构建器模式

class UserBuilder {
  private user: Partial<User> = {};

  asAdmin() {
    this.user.role = 'admin';
    this.user.permissions = ['read', 'write', 'delete'];
    return this;
  }

  asCustomer() {
    this.user.role = 'customer';
    this.user.permissions = ['read'];
    return this;
  }

  withEmail(email: string) {
    this.user.email = email;
    return this;
  }

  build(): User {
    return {
      id: this.user.id ?? faker.string.uuid(),
      email: this.user.email ?? faker.internet.email(),
      role: this.user.role ?? 'customer',
      ...this.user
    } as User;
  }
}

// 用法
const admin = new UserBuilder().asAdmin().withEmail('admin@test.com').build();
const customer = new UserBuilder().asCustomer().build();

数据匿名化

// 掩码
function maskEmail(email) {
  const [user, domain] = email.split('@');
  return `${user[0]}***@${domain}`;
}
// john@example.com → j***@example.com

function maskCreditCard(cc) {
  return `****-****-****-${cc.slice(-4)}`;
}
// 4242424242424242 → ****-****-****-4242

// 匿名化生产数据
const anonymizedUsers = prodUsers.map(user => ({
  id: user.id, // 保留ID以维护关系
  email: `user-${user.id}@example.com`, // 虚假邮箱
  firstName: faker.person.firstName(), // 生成
  phone: null, // 移除个人身份信息
  createdAt: user.createdAt // 保留非个人身份信息
}));

数据库事务隔离

// 最佳实践:使用事务进行清理
beforeEach(async () => {
  await db.beginTransaction();
});

afterEach(async () => {
  await db.rollbackTransaction(); // 自动清理!
});

test('用户注册', async () => {
  const user = await userService.register({
    email: 'test@example.com'
  });
  expect(user.id).toBeDefined();
  // 测试后自动回滚 - 无需清理
});

大量数据生成

// 高效生成10,000个用户
async function generateLargeDataset(count = 10000) {
  const batchSize = 1000;
  const batches = Math.ceil(count / batchSize);

  for (let i = 0; i < batches; i++) {
    const users = Array.from({ length: batchSize }, (_, index) => ({
      id: i * batchSize + index,
      email: `user${i * batchSize + index}@example.com`,
      firstName: faker.person.firstName()
    }));

    await db.users.insertMany(users); // 批量插入
    console.log(`批次 ${i + 1}/${batches}`);
  }
}

代理驱动数据生成

// 带约束的高速度生成
await Task("生成测试数据", {
  schema: 'ecommerce',
  count: { users: 10000, products: 500, orders: 5000 },
  preserveReferentialIntegrity: true,
  constraints: {
    age: { min: 18, max: 90 },
    roles: ['customer', 'admin']
  }
}, "qe-test-data-architect");

// GDPR合规匿名化
await Task("匿名化生产数据", {
  source: 'production-snapshot',
  piiFields: ['email', 'phone', 'ssn'],
  method: 'pseudonymization',
  retainStructure: true
}, "qe-test-data-architect");

代理协调提示

内存命名空间

aqe/test-data-management/
├── schemas/*            - 数据模式
├── generators/*         - 生成器配置
├── anonymization/*      - 个人身份信息处理规则
└── fixtures/*           - 可重用装置

舰队协调

const dataFleet = await FleetManager.coordinate({
  strategy: 'test-data-generation',
  agents: [
    'qe-test-data-architect',  // 生成数据
    'qe-test-executor',        // 使用数据执行
    'qe-security-scanner'      // 验证无个人身份信息泄露
  ],
  topology: 'sequential'
});

相关技能


记住

测试数据是基础设施,不是事后考虑。 40%的测试失败由数据不足引起。数据差 = 测试差。

切勿直接使用生产环境的个人身份信息(PII)。 GDPR罚款可达2000万欧元或4%的收入。始终使用合成数据或适当匿名化的生产快照。

使用代理: qe-test-data-architect 以每秒10k+条记录的速度生成数据,具有真实模式、关系和约束。代理自动确保GDPR/CCPA合规,并消除测试数据瓶颈。