一、工具说明




Android 查看data下各个应用的占用大小 adb命令_测试数据


datafaker是一个大批量测试数据和流测试数据生成工具,兼容python2.7和python3.4+。

架构图完整的画出了工具的执行过程,从图可知工具经历了5个模块:

  • 参数解析器。解析用户从终端命令行输入的命令。
  • 元数据解析器。用户可以指定元数据来自本地文件或者远程数据库表。解析器获取到文件内容后按照规则将文本内容解析成表字段元数据和数据构造规则。
  • 数据构造引擎。构造引擎根据元数据解析器产生的数据构造规则,模拟产生不同类型的数据。
  • 数据路由。根据不同的数据输出类型,分成批量数据和流数据生成。流数据可指定产生频率。然后将数据转换成用户指定的格式输出到不同数据源中。
  • 数据源适配器。适配不同数据源,将数据导入到数据源中。

二、工具功能

软件开发测试过程,经常需要测试数据。这些场景包括:

  • 后端开发新建表后,需要构造数据库测试数据,生成接口数据提供给前端使用--开发mock数据
  • 数据库性能测试生成大量测试数据,测试数据库性能--性能mock数据
  • 流数据测试针对kafka流数据,需要不断定时生成测试数据写入kafka--kafka流式数据mock

常用方法是人工手动造几条数据写入数据库,这种方法带来的弊端是

  • 浪费工时

针对表的不同数据类型的字段,需要构造不同数据

  • 数据量小

如果需要构造大量数据,手动造数据无能为力

  • 不够准确

比如需要构造邮箱(满足一定格式),电话号码(确定的数字位数),ip地址(固定格式),年龄(不能为负数,有大小范围)等。这些测试数据有一定的限制或规律,手工构造可能不能满足数据范围或一些格式要求而导致后端程序报错

  • 多表关联

手动造的数据量较小,在多个表中用主键不一定能关联上,或者关联出来没数据

  • 动态随机写入

比如针对流数据,需要随机每隔几秒钟写入kafka。或者动态随机插入mysql,手工操作相对麻烦,而且不好统计写入数据条数

datafaker是一个多数据源测试数据构造工具,可以模拟产生大部分常用数据类型,具有以下功能

  • 多种数据类型:包括常见数据库字段类型(整型、浮点型、字符型)、自定义类型(IP地址,邮箱,身份证号码等)
  • 模拟多表关联数据:通过制定某些字段为枚举类型(从指定的数据列表里面随机选择),这样在数据量多的情况下能保证多表Join能关联上,查询到数据
  • 支持批数据和流数据生成,可指定数据产生间隔时间;
  • 支持多种数据输出方式,包括屏幕打印、文件和远程数据源;
  • 支持多种数据源。目前支持关系型数据库、Hive、Kafka、Hbase、ES。后面将扩展到Mongo,Kudu等数据源;
  • 可指定输出格式,目前支持text,json。

三、安装说明

依赖python和pip

  • 方法1 下载安装

下载源码压缩包,解压后,到datafaker目录执行:python setup. py install

  • 方法2:直接安装

pip install datafaker

安装是否成功,可直接运行datafaker --version是否显示正确,无其他报错

不同数据库需要安装不同python包,见GitHub。


Android 查看data下各个应用的占用大小 adb命令_数据_02


四、使用示例

参考GitHub:gangly/datafaker

  • 版本信息及帮助参考
>datafaker --version
>datafaker --help


  • 直接从本地mysql的test数据库的stu表中读取元数据,并构造10条数据写入stu表
datafaker mysql+mysqldb://root:root@localhost:3600/test stu 10


  • 从本地文件meta.txt中读取元数据,以,,分隔符构造10条数据,打印在屏幕上
datafaker rdb mysql+mysqldb://root:root@localhost:3600/test stu 10 --outprint --meta.txt --outspliter ',,'


  • 从本地data/hive_meta.txt文件中读取元数据,产生1000条数据写入hive的test库,stu表中
datafaker hive hive://yarn@localhost:10000/test stu 1000 --meta data/hive_meta.txt


  • 从meta.txt中读取元数据,产生10条json格式数据写入到/home目录out.txt
datafaker file /home out.txt 10 --meta meta.txt --format json


  • 从本地meta.txt参数数据,以1s间隔输出到kafka的topic hello中
datafaker kafka localhost:9092 hello 1 -meta meta.txt --outprint


  • 数据写入hbase
datafaker hbase localhost:9090 test-table 10 --meta data/hbase.txt


  • 数据写入es
datafaker es localhost:9200 example1/tp1 100 --auth elastic:elastic --meta meta.txt


五、命令参数

参考GitHub


Android 查看data下各个应用的占用大小 adb命令_元数据_03


Android 查看data下各个应用的占用大小 adb命令_元数据_04


六、其他说明及参考文档

数据构造规则

注意事项(大批量构造数据、Python与系统支持情况、关系型数据库支持情况)