2 Star 7 Fork 1

金闽 / tdg

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

测试数据生成器-v4.0

该工具用于对项目批量添加测试数据,用于项目开发测试

目前工具不支持关联新增,但支持多表的批量数据新增

目前在测试下单表的新增性能innodb存储引擎下100w在5~7s的时间,具体性能需要依据你的电脑配置及参数配置决定

笔者的点配置如下

参数
cpu i7-8
核数 8核
内存 16G
mysql 5.7
存储引擎 innodb

关于配置文件的参数可以看下方示例则为默认参数配置

下载

go get -u gitee.com/dn-jinmin/tdg

使用

  • 创建好mysql的数据库、并为数据库中添加对应的表
  • 设置好TDG的配置
  • 通过bin/tdg --config 方式启动并生成测试数据

wuid

这是目前提供高性能的唯一id生成规则,如果需要使用wuid需要在mysql中建立如下表格,对应的tag为wuid

CREATE TABLE `wuid` (
  `h` int(10) NOT NULL AUTO_INCREMENT,
  `x` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`x`),
  UNIQUE KEY `h` (`h`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;

config配置参数解析

系统配置核心参数

{
   "tdg": {
      "data_one_init_max_memory": 104857600,
      "build_sql_worker_num": 5,
      "insert_sql_worker_num": 10,
      "build_batches_count": 2000,
      "debug": false,
      "no_write": false,
      "print_sql": false,
      "skip_err": true
    }
}
配置 解释 建议配置
data_one_init_max_memory 设置单个生成sql工作者最大初识内存 104857600
build_batches_count 用于调优,批次生成SQL并写入数据库中 2000
build_sql_worker_num 生成SQL工作者数量 5
insert_sql_worker_num 数据新增工作者数量 10
配置 解析
debug 会打印系统中的参数信息,默认false,不开启
no_write 是否写入SQL,默认false,写入sql
print_sql 打印SQL,默认false ,不打印
skip_err 遇到错误是否跳过继续写入

mysql配置

{
  "mysql": {
    "addr": "127.0.0.1:3306",
    "user" : "root",
    "pass" : "000000",
    "charset" : "utf8",
    "dbname": "sharhall",
    "table_prefix": ""
  }
}
配置 解释
addr 地址
user 用户名
pass 密码
charset 设置中文编码
dbname 连接数据库
table_prefix 表前缀

表配置

{
  "tables": {
    "table_name": {
      "status": 0,
      "table_name": "table name",
      "count": 1000,
      "columns": {
        ""
      }
    }
  }
}

其中tables中定义需添加测试数据的表格与规则、支持同时添加多个表格

配置 解析
tables.table_name 表名,别名
tables.table_name.table_name 数据库表名
status 表状态 -1不新增 默认0新增
count 生成数据量
columns 生成字段列表

字段配置示例:

{
  "table": {
    "table_name": {
      // ..
      "columns": {
        "col_name": {
          "tag": "tag-name",
          "len": 10,
          "fixed_len": "2|3",
          "max": 100,
          "min": 10,
          "params": "params",
          "default": {
            "value": "default-value",
            "frequency": 30
          },
          "content": [
            0,1,2
          ]
        }
      }
    }
  }
}

配置详细

配置 解释
table.table_name.col_name 数据表字段名,根据实际数据表字段定义
tag 测试数据生成规则,如果不值得则需自定义content或default,默认为 "" 空字段
len 字段数据长度,固定长度
fixed_len 字段数据长度,可变长度;定义规则min|max 示例: 2|3则长度范围为(2,3)
max 最大值,目前仅支持数值类型
min 最小值,目前仅支持数值类型
params 规则参数,根据实际规则参数定义
default.value 默认值
default.frequency 默认值生成概率,以百分比进行计算frequency=100相当于100%,以百分比进行计算frequency=30则为30%
content 自定义测试数据的生成内容

tag规则

执行tdg tag即可查看所有支持tag

tag-name 解释
wuid 生成唯一随机id,需在数据库建立对应wuid表
uint 生成随机int类型数据,范围为(0 R)
char 随机 09, az, A~Z 组合字符
phone 随机手机号码
email 随机邮件
name 随机名字
address 随机地址
bankId 随机生成银行卡
city 随机城市
idcart 随机身份证号码
chinese_char 随机中文字符
english 随机az,AZ组合数据
wuid 随机wuid
order_no 随机订单号码
password 随机密码,支持hash与md5,默认密码0000
date 随机时间,格式[2006-01-02]
datetime 随机时间,格式[2006-01-02 15:04:05]
time 随机时间,格式[15:04:05]
timestamp 随机时间戳

所有时间规则,在指定Default.Value为now则会获取当前时间;

关联

可根据两个表的关联关系同时新增测试数据,

在etc中提供了一份用例table.json,如下为用例的数据表结构,目前支持的关联关系为1:1,1:n,n:1

{
  "relevancy": {
      "member:member_info": {
        "tables": ["member","member_info"],
        "columns": ["id"   ,"id"],
        "ties": "1:1"
      }
  }
}

配置详细

配置 解释
relevancy 关联关系
member:member_info 关联关系key,自定义
tables 关联表,暂时为两表关联
columns 关联字段,与关联表信息一一匹对
ties 关联关系

实例

构建如下mysql表结构

CREATE TABLE `member_info` (
  `id` varchar(255) NOT NULL,
  `age` int(11) DEFAULT NULL,
  `sex` int(11) DEFAULT NULL,
  `card` varchar(255) DEFAULT NULL,
  `desc` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=Innodb DEFAULT CHARSET=utf8;

CREATE TABLE `member` (
  `id` varchar(255) NOT NULL,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `phone` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `status` tinyint(4) DEFAULT NULL,
  `date` date DEFAULT NULL,
  `datetime` datetime DEFAULT NULL,
  `timestamp` int(11) DEFAULT NULL,
  `time` time DEFAULT NULL,
  `order_no` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=Innodb AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
MIT License Copyright (c) 2017 Andrey Gayvoronsky <plandem@gmail.com> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

用于为mysql生成批量测试数据 展开 收起
Go
MIT
取消

发行版 (1)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
Go
1
https://gitee.com/dn-jinmin/tdg.git
git@gitee.com:dn-jinmin/tdg.git
dn-jinmin
tdg
tdg
master

搜索帮助