如何获取 MySQL 的测试数据,这是个很经典的问题,在开发、测试和性能优化的各个环节中,获取合适的测试数据都是必不可少的。MySQL 官方还特地提供了示例库 employees,用于测试用途,但 employees 并不是万能的,在某些情况下,生成更接近自己业务场景的测试数据才更加有效。
笔者以前生成测试数据,都是用的 sysbench,又快又好用,在性能测试场景下非常有效。但它也有缺点,那就是 sysbench 生成的都是【无意义】的字符与数字的组合,基本上只适合做性能压测。
那么测试数据为什么需要【有意义】呢?我们一起来看看:
性能测试不仅仅是读写速度:在真实的业务环境中,数据库的性能不仅和数据量、查询速度有关,还和数据的分布、索引的使用密切相关。如果测试数据和真实数据相差太远,比如 sysbench 生成的随机字符串和实际业务中有逻辑规律的数据,性能测试的结果可能会与实际使用场景不符。
功能测试和业务逻辑验证需要真实感:许多系统测试需要验证业务逻辑的正确性。无意义的数据无法全面验证系统在各种输入情况下的表现。
数据关联性:许多业务系统中的数据存在关联性,比如一个电商平台的用户表和订单表之间的关系。生成测试数据时,如果只用随机数据,那么这些关联性会很难得到体现,测试时也无法验证系统是否能正确处理这些数据之间的关系。
长篇大论总结为一句话:根据自身业务逻辑创建的有意义的测试数据才能让测试结果更加可靠。这样一来,从网上获取开源数据集,或者用 sysbench 创建随机字符串就都无法满足了,我们需要一种可以根据自身业务逻辑,来自动生成真实测试数据的方法,那就不得不提一提 NineData 最新推出的数据生成功能了。
NineData 数据生成介绍
NineData 支持在数据库中自动生成符合特定业务场景的随机数据,用于模拟实际生产环境中的数据情况,帮助用户在不使用真实数据的情况下,进行功能测试、压力测试以及其他验证工作。
预定义的仿真规则:内置了 42 条预定义仿真规则,覆盖大部分业务场景。除此之外,支持创建自定义仿真规则。
生成数据量可控:支持 1 ~ 1000万条测试数据生成,可通过 SQL 开发规范进行限制。
自动关联相关字段:通过识别规则,仿真规则将自动关联对应的数据库字段,无需手动关联。
实操示例
那么我们就直接来试一下,为 account 表增加 1000 条测试数据。
1. 在数据生成任务页面,选择需要生成测试数据的数据源、库,以及表,然后为每个字段配置仿真规则
2. 单击右侧的配置算法可以为仿真规则配置更加细节的选项。
3. 左侧的生成数据量中可以配置需要生成多少条数据。单击右侧的预览还可以预览数据生成效果,确认配置算法是否符合预期。
4. 如果需要配置外键逻辑,为有业务关联性的两张表创建测试数据,可以使用外键约束规则,为外键列设置关联的主键值,这样,程序会从关联表的主键中随机获取数据作为当前表外键列的值。
5. 提交后就可以执行了。
总结