部分思路参考:https://www.guru99.com/software-testing-test-data.html
测试数据在测试中扮演的角色
如何生成测试数据
- 方式1:手动设计
- 方式2:搬运
- 方式3:自动生成
测试数据在测试中扮演的角色
对于被测系统而言,一条测试数据是指一组输入和对应输出的组合。因此,测试的本质其实就是一个产生和消耗大量数据的过程。这些数据可以被用于以下两种用途:
- 正面测试(Positive Testing):验证程序对于给定输入集是否产生预期结果
- 负面测试(Negative Testing):验证程序处理异常、极端、异常或意外输入的能力
因此,测试数据对于测试而言非常重要。
对于功能测试(Functional Testing)而言,测试数据是否完备基本决定了测试用例设计是否完备,从而影响大家对软件质量的判断。例如测试用例设计中的边界值分析也就是为了从设计上覆盖用例的各种情况。
对于性能测试(Performance Testing)而言,测试数据甚至可以决定测试的结果是否可信。例如全链路压测中为了反映真实的业务场景,通常都会使用工具来进行流量录制回放。又如算法效果测试中为了描述算法在各种场景中的表现,需要持续的采集并整理成各类测试集。
如何生成测试数据
方式1:手动设计
门槛最低,后期扩展成本最高的方法,功能测试大多使用这类方法。
常见的设计策略包括:
- 白盒测试
- 常规类:无效参数类型、无效参数组合
- 内容类:语句覆盖、分支覆盖、条件覆盖、路径覆盖
- 黑盒测试
- 常规类:无数据、有效数据、无效数据、非法数据格式
- 策略类:边界条件、等价类划分、决策表、状态转换、
方式2:搬运
这一类方法主要是用于尽量在测试环境中复现正式场景中的使用情况。通常搬运数的源头有两种:生产环境(如公有云类产品)、客户端系统(如ToC Andorid/iOS产品)。
常见的有:
- 生产环境
- 线上流量拷贝:TCPCopy、gor、jvm-sandbox
- 客户端系统
- 自动埋点上报:用户关键操作的链条、Crash堆栈
- 本地配置信息、数据库
方式3:自动生成
对于规则清晰的场景,可以通过自动化的方式批量生成大量测试数据进行随机探测,主要的用途是确保系统的鲁棒性。
常见的有:
- Fuzz 测试
- Moneky
- 数据生成
- https://github.com/faker-ruby/faker
- https://github.com/fzaninotto/Faker
- https://github.com/joke2k/faker