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> 当创建或管理测试数据时:
- 绝不直接使用生产环境的个人身份信息(PII)
- 使用faker库生成合成数据
- 如果使用生产数据,进行匿名化处理(掩码、哈希)
- 隔离测试数据(事务、每次测试清理)
- 通过批量生成扩展(每秒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'
});
相关技能
- database-testing - 模式和完整性测试
- compliance-testing - GDPR/CCPA合规
- performance-testing - 性能测试的大量数据
记住
测试数据是基础设施,不是事后考虑。 40%的测试失败由数据不足引起。数据差 = 测试差。
切勿直接使用生产环境的个人身份信息(PII)。 GDPR罚款可达2000万欧元或4%的收入。始终使用合成数据或适当匿名化的生产快照。
使用代理: qe-test-data-architect 以每秒10k+条记录的速度生成数据,具有真实模式、关系和约束。代理自动确保GDPR/CCPA合规,并消除测试数据瓶颈。