返回经验列表
测试数据开发工具工程实践

测试数据生成最佳实践:让 Mock 数据更真实

Petmind2026-06-226分钟阅读

测试数据生成最佳实践

Mock 数据是开发中的重要资产,质量直接影响开发效率和测试准确性。

测试数据的分类

1. 基础测试数据

最小可用集,覆盖核心场景:

  • 50 个用户
  • 100 个地址
  • 10 个产品
  • 200 条订单
  • 2. 边界测试数据

    极端和异常情况:

  • 超长字符串
  • 特殊字符
  • 空值和 null
  • 最大最小值
  • 多语言字符
  • 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. 避免敏感数据

    不要在测试数据中包含:

  • 真实身份证号
  • 真实银行卡号
  • 真实密码
  • 真实手机号
  • 使用专门的测试号段:

  • 美国电话:555-01XX
  • 测试邮箱:`example.com`
  • 测试卡号:`4111-1111-1111-1111`
  • 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(),

    ...

    }))

    );

    }

    ```

    数据压缩

  • 重复模式用种子生成
  • 使用 enum 引用而非重复值
  • 大文本用文件名引用
  • 测试场景数据

    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 号' }

    ];

    ```

    美国地址生成实践

    对于美国地址生成器(开发测试工具),应该:

  • 覆盖所有 50 州:每个州至少有 5-10 个城市
  • 真实邮编范围:避免使用统一前缀
  • 多样化的街道名:包含数字、单词、混合
  • 公寓号格式:Apt、Ste、Unit、#
  • 特殊字符处理:连字符、撇号
  • 总结

    高质量的测试数据需要:

  • 真实性:接近真实场景
  • 多样性:覆盖各种情况
  • 安全性:不含敏感信息
  • 可维护性:易于更新和扩展
  • 性能:可快速生成大量数据
  • 掌握这些原则能让你生成的测试数据更有效,提升开发效率。

    返回经验列表