测试数据生成最佳实践:让 Mock 数据更真实
测试数据生成最佳实践
Mock 数据是开发中的重要资产,质量直接影响开发效率和测试准确性。
测试数据的分类
1. 基础测试数据
最小可用集,覆盖核心场景:
2. 边界测试数据
极端和异常情况:
3. 真实场景数据
模拟真实用户行为:
关键原则
一致性
```javascript
// 同一个人有相同的地址
const user = {
name: 'John Smith',
address: '123 Main St, San Francisco, CA 94105'
};
```
多样性
```javascript
const names = [
'John Smith', 'Maria Garcia', 'Wei Zhang',
'Ahmed Hassan', 'Yuki Tanaka', 'Anna Petrov'
];
```
真实性
```javascript
// 真实的美国电话格式
const phone = '(415) 555-1234';
// 真实的邮编
const zip = '94105';
```
边界覆盖
```javascript
const testCases = [
{ name: '正常', street: '123 Main St' },
{ name: '超长', street: 'A'.repeat(200) },
{ name: '空字符串', street: '' },
{ name: '特殊字符', street: 'O'Reilly & Sons #5' },
{ name: '多语言', street: '北京市朝阳区' }
];
```
常用工具
1. Faker.js
```javascript
import { faker } from '@faker-js/faker';
const address = {
street: faker.location.streetAddress(),
city: faker.location.city(),
state: faker.location.state({ abbreviated: true }),
zip: faker.location.zipCode()
};
```
2. Mockaroo
在线生成 CSV/JSON:
3. 自建生成器
针对特定业务:
```javascript
function generateUSAddress(stateCode) {
const cities = STATE_CITIES[stateCode];
return {
street: `${randomInt(100, 9999)} ${randomStreetName()} ${randomStreetType()}`,
city: randomFrom(cities),
state: stateCode,
zip: generateZipForState(stateCode)
};
}
```
数据生成原则
1. 不要使用真实个人信息
```javascript
// 反例:使用真实姓名
const name = 'John Smith'; // 可能是真实的人
// 正例:使用随机生成
const name = faker.person.fullName();
```
2. 避免敏感数据
不要在测试数据中包含:
使用专门的测试号段:
3. 明确的标识
```javascript
// 标识数据为测试数据
const testUser = {
email: 'test.user.001@example.com',
isTestData: true
};
```
性能考虑
大数据量生成
```javascript
// 流式生成避免内存占用
import { Readable } from 'stream';
function generateAddresses(count) {
return Readable.from(
Array.from({ length: count }, (_, i) => ({
id: i + 1,
street: faker.location.streetAddress(),
...
}))
);
}
```
数据压缩
测试场景数据
1. 验证测试
```javascript
// 邮编格式验证
const zipTests = [
{ input: '12345', expected: true },
{ input: '12345-6789', expected: true },
{ input: 'ABCDE', expected: false },
{ input: '1234', expected: false }
];
```
2. 性能测试
```javascript
// 10万条地址数据
const addresses = Array.from({ length: 100000 }, () =>
generateAddress()
);
```
3. UI 测试
```javascript
// 视觉测试数据
const visualTests = [
{ name: '短地址', value: '123 Main St' },
{ name: '长地址', value: '1001 Long Street Name Avenue Boulevard' },
{ name: '多语言', value: '北京市朝阳区建国路 100 号' }
];
```
美国地址生成实践
对于美国地址生成器(开发测试工具),应该:
总结
高质量的测试数据需要:
掌握这些原则能让你生成的测试数据更有效,提升开发效率。