研发效能 造数工具

hippo · March 23, 2023 · Last by hippo replied at May 05, 2023 · 16123 hits

背景

平时工作中经常会碰到需要构造大量测试数据的场景,造数也需要尽可能的符合真实数据,手动构造耗时耗力,特别是项目工期紧时,造数任务重时,人工造数压力会很大,而且容易出错。虽然也有通过脚本方式可以做自动化批量造数,但是需要提前花费时间去开发脚本,数据测试会涉及到多张表,那就可能每张表都要开发脚本,并且需要具备一定的代码编写能力。那如果能有自动配置表字段,自动依据设定好字段规则去生成测试数据,而不依赖任何脚本或开发工具,那会给造数工作带来很大的便利。

基本操作流程

新建数据源 --> 配置表字段生成规则 --> 写入数据

操作说明

新建数据源

目前支持数据源类型:MySQL、clickhouse
使用数据生成的前提需要新建一个数据源,输入对应信息保存即可。

配置字段规则

规则大类 规则名称
通用 正则表达式、布尔值、整数、数字字符串、浮点数、UUID、数字字母替换、日期、日期时间、时间戳
个人 姓名、银行卡、居民身份证、手机号、邮箱、中国护照、香港身份证、性别、婚姻状况、职位名称、民族
位置 省份、详细地址、城市
企业 企业名称、部门名称、行业、经营范围
电脑 图片地址、User-Agent、ipv6、内网 ipv4、公网 ipv4、macAddress、password、hex、md5、sha1、sha256、sha512
其他 无规则

通用类

1.通用 / 正则表达式 / 表达式

此处可以保存的正则,方便后续使用。

2.通用 / 序列 / 开始值, 递增值

3.通用 / 整数 / 最小值, 最大值

4.通用 - 浮点数

5.通用 / 日期 / 最小日期,最大日期

7.通用 / 数字字符串 / 位数

8.通用 / 数字字母替换 / # 替换数字?替换字母

通用类中其他规则就不一一举例了。

个人类

个人 / 姓名

银行卡、居民身份证、手机号、邮箱、中国护照、香港身份证、性别、婚姻状况、职位名称、民族等生成结果如字面意思。

位置类

位置 / 城市

省份、详细地址等生成结果如字面意思。

企业类

企业 / 企业名称

部门名称、行业、经营范围等生成结果如字面意思。

电脑类

电脑 / 内网 ipv4

图片地址、User-Agent、ipv6、公网 ipv4、macAddress、password、hex、md5、sha1、sha256、sha512 等生成结果如字面意思。

其他类

其他 / 无规则 / 生成结果,输入的是什么值,生成的就是什么值。

关联其他表字段生成数据

1.选择其他表,选择后查询是否有表数据,有数据才再进行字段的选择。
2.选择表字段。
3.不加过滤条件的查询结果 =(select 表字段 from 表名),如果关联表字段的值需要过滤,可以在过滤条件内写入 where 语句。

关联当前表字段生成数据

不映射时,选择当前表字段,生成结果=当前表字段的值。
ex:选择当前表字段 tag_1017,tag_1017 生成的值=01 时,当前字段的生成值=01。

映射时,生成结果=当前表字段的值根据 JSON 转换的值。

// 列子JSON
[
    {
        "code":"01",
        "name":"企业"
    },
    {
        "code":"02",
        "name":"个体户"
    }
]

ex:选择当前表字段 tag_1017,tag_1017 生成的值=01 时,当前字段的生成值=企业。

关联文件生成数据

限制 1:关联的文件只能上传单个 xls、xlsx 文件,且不超过 5M。
限制 2:文件内容首行表头必须有字段名和当前配置的字段名相同,如此时配置 tag_1120,则文件首行就需要有 tag_1120 的表头。

新建映射

生成的字段配置完成之后,可以通过新建映射的方式保存配置规则,方便下次再生成该表数据时,直接能引用映射,无需再配置一遍。

映射引用

当前数据源下,所有保存的映射都会在映射列表内显示。选择某个映射确定后,该映射内容会覆盖当前表字段配置。
在映射列表中通过点击详情按钮可查看映射内容的详细信息。

导出数据

导出数据到 execl。
跟进当前数据源类型来决定是导出数据到 clickhouse 还是导出数据到 MySQL。

共收到 30 条回复 时间 点赞

大佬,是不是缺个链接💯

自己写的还是开源的

hippo #3 · March 23, 2023 Author
mylittlegoblin 回复

自己写的

hippo #4 · March 23, 2023 Author
迷龙 回复

还没有外网的 demo。😂

期待开源👍

期待开源 +1

开源一波啊

如果开不了源,那就只能模仿了。 谢谢楼主思路~

期待开源👍

hippo #11 · March 24, 2023 Author
天邪泪 回复

后期会开源

对于 erp,去造数,好像只能用手去点

不知道我理解的对不对:根据字段规则随机生成字段内容?那这个生成是有个定时任务?

hippo #14 · March 28, 2023 Author
xiaomogu 回复

没有定时任务,生成数据是同步的,在写入的时候,页面 loading 了。

造数,其实更需要的是业务数据。 上游的真实业务数据。

正如 15 楼所说,造数需要的是造业务数据。
没有业务含义的数据, 一个 faker 库就能生成

hippo #18 · March 31, 2023 Author
lazyBoy 回复

是的,也有用到 Faker 的库,然后再加了公司需要的一些字段,做了自定义规则。

hippo #19 · March 31, 2023 Author
米阳MeYoung 回复

实际业务数据,有些规则就自己另写方法,这里面也有我自定义的规则,我只是取了 Faker 库中我需要的,再和我自定义的规则结合。

hippo 生成用例工具 中提及了此贴 07 Apr 09:41

试用了一下,真的很厉害,期待您能开源呢

这个我们内部也做了一个,我们把一个构造数据的场景做为一个测试用例管理,每个测试用例里可以有多个步骤,这样方便多次添加数据构造 (可能每次构造时会存在多种情况串行执行),配置完毕后可以保存用例,后面直接可以运行即可

hippo #23 · April 10, 2023 Author
Jerry 回复

谢谢评价,整理好会开源 还有 UI 自动化的没写完。

hippo #24 · April 10, 2023 Author
轩天 回复

想法挺好的。

建议造数的时候也可以通过 DDL 语句去新增库表,这样不用连接数据库,也可以去造数

我也贴一个,我之前做的造数中心。 这个是初版。https://www.yuque.com/testdevops/devops/zngqgv

hippo #27 · April 11, 2023 Author
Jerry 回复

嗯嗯 目前我们测试环境的表都是从开发库同步过来,自己创建的很少,所以就没在页面加这个操作 DDL 的入口了。

hippo #28 · April 11, 2023 Author
米阳MeYoung 回复

大佬 你这个是主要是 mock 接口入参数据么。后面我也打算在接口用例上开展。

hippo 回复

真实业务数据

hippo #30 · April 20, 2023 Author

项目已开源,在本站的开源项目里上传了

hippo 回复

你好 能给个链接么 在开源项目中没有找到

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up