gangly / datafaker

Datafaker is a large-scale test data and flow test data generation tool. Datafaker fakes data and inserts to varied data sources. 测试数据生成工具
626 stars 168 forks source link

能否支持从其他列生成相对应的参数,或规则中新增函数类型,调用函数支持传参实现来求值? #95

Open kamjin1996 opened 2 years ago

kamjin1996 commented 2 years ago

我已经用datafaker生成了很多表的数据,首先非常的感谢作者!感觉很好用,简单,高效,同时也推荐给了其他同事使用 但我在生成某个表时,有以下需求难以实现: 举个例子: 表有字段level,值为枚举【first,second,third】随机一个, 同表的另一字段为is_first_level,tinyint(1)类型,这个列的值是根据上面level字段的值是否为first来确定是true还是false,level是first时,is_first_level为true,考虑了orderEnum的方式,虽然orderEnum某些场景下很好用,也能满足大部分需求,但这种根据列自定义生成其他列的需求用orderEnum工作量还是蛮大的,生成的数据量比较大,写orderEnum就要手动写很多 请问我不用orderEnum该怎么实现这个生成规则?

需求2: 还有个类似的需求,比如id是递增的数字,我有个code值是前缀加id来生成的并且格式化为前面补充0,比如id是1时,则code生成tp_001

虚心请教一下,现有的api是否支持以上的操作?我看文档有个op,我的level字段在第2列,is_first_level在第3列,我在第三列试了op(c2),我虽可取到第二列的值但我却无法根据值判断且转换为true或false填入对应列,这个操作其实感觉就像是三元表达式:op(c2) == first ? true : false,以上有对应的支持计划吗,或者现有的api该如何不使用orderEnum的情况下实现这个操作?再次感谢作者

gangly commented 2 years ago

需求1目前只能用order_enum来实现,对于数据量大的话确实比较麻烦; 需求2中可以用metaj参数合成复杂字符串,前面自动填0现在还不能实现; op参数主要用来实现列之间的四则运算,不过你给出的op(c2) == first ? true : false倒是给了我提示, 试试op(c2=='first'),我这里本地测试可以的

kamjin1996 commented 2 years ago

哇哦,期待,目前我已经用java代码里调用bat脚本,结合代码再做数据前后处理的方式实现需求了,感觉代码结合datafaker库做前后处理也挺好用的,不过肯定还是没有直接脚本省事毕竟要打开idea花时间写代码