/DataSimulator

根据特定格式的配置文件批量生成测试数据,用于单元测试。

Primary LanguageJavaGNU Affero General Public License v3.0AGPL-3.0

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
2022/01/13更新:
可预期的未来再用不上这个工具了,那么也没有优化和升级的必要了,索性便归档了。
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

DataSimulator

SoyaDokio's GitHub stats

👉 介绍

数据表描述文件 生成可插入/导入数据库的模拟数据记录,主要用作数据测试。

p.s. 目前尚未开发一键导入数据库功能。

👉 获取

最新版(DataSimulator_v1.0.5) 下载

各版本详见 Release 页面。

👉 使用

  1. 双击运行DataSimulator_v*.*.*.jar
  2. (非首次运行跳过此步骤)首次运行后无任何提示,但会在同级(子级)目录下生成下列3个文件:
.\log\log.yyyy-MM-dd.log    // 运行日志
.\tableinfo.conf            // 数据表描述文件(默认的配置文件)
.\person.sql                // 使用默认 数据表描述文件 生成的 SQL Script
  1. 规范和需求修改.\tableinfo.conf文件。
  2. 再次双击运行DataSimulator_v*.*.*.jar
  3. 同级目录下会生成SQL Script .\table_name.sql

👉 格式 & 规范

table:table_name_1 rows
field_name_1 field_type_1 [min,max)|{val_1,val_2,...,val_n} pk
field_name_2 field_type_2 [min,max)|{val_1,val_2,...,val_n} nn
...
field_name_n field_type_n [min,max)|{val_1,val_2,...,val_n}

table:table_name_2 rows
field_name_1 field_type_1 [min,max)|{val_1,val_2,...,val_n} pk
field_name_2 field_type_2 [min,max)|{val_1,val_2,...,val_n} nn
...
field_name_n field_type_n [min,max)|{val_1,val_2,...,val_n}

...

table:table_name_n rows
field_name_1 field_type_1 [min,max)|{val_1,val_2,...,val_n} pk
field_name_2 field_type_2 [min,max)|{val_1,val_2,...,val_n} nn
...
field_name_n field_type_n [min,max)|{val_1,val_2,...,val_n}
  • #//为起始的行为注释行
  • 数据表描述文件 中单次出现多表(超过1个)的描述时,执行后生成的 SQL Script 文件以第一个表名命名
  • 记录的行数为必填信息
  • 字段的每一项描述信息之间以空格隔开
  • pk 表示主键,可选
  • nn 表示非空,可选
  • 字段类型支持:intlongfloatdoublestringvarcharstringvarchar效果相同)
  • (可选)当字段类型选择floatdouble时,可在类型后紧跟.加数字,约束保留小数位数
  • 对字段取值的约束包括三种情况:[min,max){val1,...,valn}无约束最多只可出现一种约束
  • [min,max)表示可以取到从min(包含)到max(不包含)的所有值,当主键用此约束时该区间的取值范围应不小于所需生成字段的行数
  • {val1,...,valn}表示取值集合,当元素为字串时不添加任何单/双引号

👉 实例

现设定数据表描述文件内容如下:

table:employee 20             // 表名设置为employee,生成20条数据
id int [1,100) pk             // 字段名为id,数据类型为int,取值范围为1(包括)到100(不包括),设为主键
gender varchar {男,女}        // 字段名为gender,数据类型为varchar,取值集合为{'男','女'}
age int [20,60)               // 字段名为age,数据类型为int,取值范围为20(包括)到60(不包括)
salary double.2 (2000,20000]  // 字段名为salary,数据类型为double,取值范围为2000(不包括)到20000(包括),“.2”表示保留两位小数
title varchar {PM,PG,UI}      // 字段名为title,数据类型为varchar,取值集合为{'PM','PG','UI'}

所得employee.sql内容为:

insert into employee(id,gender,age,salary,title) values
(75,'',33,0.053412216308810656,'PM'),
(2,'',22,0.7373495886901945,'UI'),
(31,'',29,0.5466897458391717,'PG'),
(81,'',56,0.15709275796406597,'UI'),
(60,'',46,0.11366817390196249,'PM'),
(37,'',50,0.19773740297508902,'UI'),
(20,'',44,0.7869982163966656,'PM'),
(65,'',29,0.7024254510631527,'PG'),
(80,'',28,0.5929413550962656,'PG'),
(93,'',42,0.32266202529378485,'UI'),
(46,'',44,0.6921483413816466,'PG'),
(26,'',32,0.4350518267144764,'UI'),
(52,'',38,0.8919574955689352,'PM'),
(72,'',30,0.972047441269007,'PM'),
(53,'',48,0.30833638137585206,'UI'),
(82,'',30,0.6349515457561012,'PM'),
(35,'',49,0.5818325137221259,'UI'),
(58,'',41,0.23495425464630737,'UI'),
(69,'',42,0.8938033638341923,'UI'),
(71,'',20,0.979530811769143,'PG');