# supermock **Repository Path**: ppcirgo/supermock ## Basic Information - **Project Name**: supermock - **Description**: 这是一款高效的数据模拟工具,它支持多种数据类型的模拟,并通过声明式描述简化了模拟逻辑的定义。此外,该工具能够根据设定的策略,将数据自动发送至ES、Kafka、JDBC等多种存储介质,为用户提供了灵活的数据生成和分发方案。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://coder69.cn - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 0 - **Created**: 2024-05-23 - **Last Updated**: 2024-11-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: 数据模拟, Java ## README ## 0.环境依赖 - JDK17+ - Springboot3.2.5 - H2DB ## 1.动机 还是没忍住,想打造一款强大的数据模拟软件。那么强大在哪些方面呢? 方面1:支持生成结构化的数据以及非结构化的数据 - 结构化的数据支持输出json、csv、tsv格式 - 非结构化的数据仅支持json格式输出 方面2:支持多种数据类型模拟 - 整数 int、long - 小数 double - 文本 string - 布尔 bool - ip ip4、ip6 - 正则 regex - 数组 以上所有类型的数组类型 方面3:支持多种模拟策略 - 整数 范围随机、枚举随机、步进递增递减 - 小数 范围随机、枚举随机 - 布尔 支持设置true/false比例 - 文本 枚举随机、uuid - ip 范围随机、枚举随机 - 正则 正则随机 > 枚举支持复合,例如可枚举uuid. 方面4:支持多种发送方式 - 保存在本地磁盘 - socket - http接口 - grpc接口 - jdbc接口 - 发送到es - 发送到kafka - 发送到hdfs - 待增加... > 注:
> ①发送的数据,既可以源于模拟之后,也可以源于本地文件
> ②支持上述接口的安全层,ssl或tls认证
> ③支持配置发送抖动,例如第1秒发送10条,第2秒发送3条...
> ④支持单次任务、周期任务、cron任务 方面5:提供UI界面 - 配置模拟任务 - 监控模拟进度 - 监控发送进度 --- 基于此,在大多数场景可以快速测试。 ## 2.功能 例如我们有这样一个DSL表达,其表示一条记录的规则: ```json { "id": "int;incr[0,1]", // int类型,从0开始,递增步进为1 "userId": "string;uuid[format/noformat,lower/upper]", // 生成uuid,格式化,小写 "storeId": "string;ref{3}uuid[noformat,upper]", // 枚举常量,自动生成3个uuid作为枚举值 "addrs": [ 2, //数组长度为2 "string;enum[重庆市潼南区,山西省运城市,太原市场,西安市]" // 代表数组元素是一个基本类型 ], "names": [ 3, { "isGirl": "bool;ratio[true,60]", // 模拟生成bool类型,且true占比为60%,范围[0,100] "name": "string;enum[刘周,xiao,榴莲,5566,ppcirgo,阿飞]", "age": "int;range[30,70]", "arr": [ 5, "int;range[10,30]" ] } ], "other": "int;enum[1,3,6,7]", "email": "string;regex:[a-z]{6}\\@[a-z]{3}\\.com" // 支持常规正则表达式 } ``` 实际模拟出来的数据形如: ```json { "userId" : "8a96a81c-df97-467a-afbc-e085e2ffef51", "storeId" : "42F242BB-40F5-4566-A398-660EEFF33F60", "addrs" : [ "西安市", "山西省运城市" ], "names" : [ { "id" : 9000, "isGirl" : true, "name" : "榴莲", "age" : 54, "arr" : [ 26, 27, 26, 16, 11 ] }, { "id" : 8999, "isGirl" : true, "name" : "xiao", "age" : 67, "arr" : [ 18, 20, 29, 24, 24 ] }, { "id" : 8998, "isGirl" : true, "name" : "ppcirgo", "age" : 31, "arr" : [ 27, 10, 18, 30, 28 ] } ], "other" : 3, "email" : "efbubd@niy.com" } ```