测试数据生成器
该工具用于对项目批量添加测试数据,用于项目开发测试,请勿在生产环境下应用
目前工具只支持单表的批量数据新增
1 应用
代码生成示例:
import (
"time"
"fmt"
"gitee.com/DNjinmin/generator/build"
"gitee.com/DNjinmin/generator/db"
"gitee.com/DNjinmin/generator/field"
)
/**
* @Author DNjinmin
*/
func init() {
db.Init("root", "000000", "127.0.0.1", "3306", "shopstar")
field.Init()
}
func main() {
fmt.Println( "数据添加完成 : 开始 :", time.Now())
// 基于 insert into table_name(col) values(xxx),(xxx),(xxx)
//CREATE TABLE `member` (
// `id` varchar(255) NOT NULL,
// `username` varchar(255) NOT NULL,
// `password` varchar(255) NOT NULL,
// `status` tinyint(255) NOT NULL DEFAULT '1',
// `phone` varchar(255) NOT NULL,
// `age` int(11) NOT NULL,
// `sex` tinyint(4) NOT NULL,
// PRIMARY KEY (`id`)
//) ENGINE=InnoDB DEFAULT CHARSET=utf8;
data := map[string]string{
"`id`" : field.DescName(field.Wuid.Name()),
"`username`": field.DescName(field.Name.Name()),
"`password`": field.DescName(field.HashPassword.Name()),
"`status`" : field.DescIndex(field.Num.Name(), 2),
"`phone`" : field.DescName(field.Phone.Name()),
"`age`" : field.DescIndex(field.Num.Name(), 120),
"`sex`" : field.DescIndex(field.Num.Name(), 2),
}
build.NewInsertOnlyDao(data, "member", 1, 1, 5000).Insert()
fmt.Println( "数据添加完成 : 结束 : ", time.Now())
}
本工具主要通过自定义map存储表字段,及字段对应的生成数据类型及规律;通过field定义字段的生成规则,利用dao做数据的添加
其中关于field/Desc
系列方法如下
// name 为字段标识
// length 数据的长度/范围
// def 默认值
// probability 默认值出现的随机频率
func Desc(name string,length int, def string, probability int) string
func DescName(name string) string
func DescIndex(name string, length int) string
2. 系统规则
目前系统规则主要是在field/options.go
中定义,在field/options_init.go
中通过Init()方法注册加载
自定义规则需要自己实现field/options.go
中的OptInterfcae
接口
const (
FuParamNil = iota // 默认不传参
FuParamOne // 传参int类型
)
type OptInterfcae interface {
Name() string
Types() int
Fu() interface{}
}
通过field/options_init.go
中的RegisterOpts
注册即可
如下为示例
import (
"gitee.com/DNjinmin/generator/field"
)
var Chinese = new(chinese)
type chinese struct {}
func (*chinese) Name() string {
return "chinese"
}
func (*chinese) Types() int {
return FuParamOne
}
func (*chinese) Fu() interface{} {
return func(index int) string {
return "chinese"
}
}
field.RegisterOpts(Chinese)
3. wuid
如果需要用到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;
4. 更新计划
- 优化内存超标卡死的问题