Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

51 Commits

Repository files navigation

FakerFactory

伪造测试数据的API服务

结合中国国情,伪造测试数据

伪造测试数据的库有很多,Python有大名鼎鼎的faker,Golang有gofakeit, 但是这些库的中文本地化都不够完善,工作中用的数据大部分是中文,因此想做一次本地化,方便团队开展测试,不再为测试数据发愁。

美中不足的是,faker和gofakeit都只是一个第三方库,不是一个服务,需要自己写代码来调用才能达到测试效果,而且安装部署起来依赖包比较多(个人目前研发生产环境均为内网,无法连接互联网),部署实在是不方便。

于是我就想如果我做成一个性能比较好的服务,提供API,让大家都能通过HTTP请求灵活获取所需的数据,岂不美哉!而且这个服务的应用面应该是很广的,可以用于单元测试、功能测试、性能测试、可靠性测试,而且可以解决研发生产环境没有持续的测试数据的痛点!

为什么没有用Python?考虑到几个方面:

  • Python的部署比较复杂,Golang只要编译好提供二进制文件就好,比较方便(经常出差去客户现场,部署开发环境就是噩梦)。
  • Golang的并发性能比较好(虽然Python也有Tornado框架)。

目前已经支持的数据类型(即columns字段的可选参数)

序号参数说明
1color颜色
2job职业
3name中文名字
4sex性别
5address地址信息(地区编号、邮编、固话区号、省市信息、社区名称、社区简称、经纬度)
6idcard大陆居民身份证号码
7age年龄
8mobilephone移动电话号码
9email电子邮箱
10imidIM类型的用户ID
11nickname用户昵称
12username用户名
13password用户密码
14website网站地址
15url网址URL(随机http或https)
16airport国内机场信息(IATA编码、城市名称、ICAO编码、机场名称、城市拼音)
17voyage国内航班号
18airlineinfo国内航空公司信息(代号、中文名称)
19traintrips火车班次(覆盖高铁、动车、特快、普快、城际、旅游专线)
20trainseat火车座号
22flightseat飞机座号
23ipv4ipv4的点分型IP地址
24ipv6ipv6的点分型IP地址
25macmac地址(随机大小写,分隔符)
26useragent浏览器请求头
27imsiIMSI(目前只支持国内460开头的)
28imeiIMEI(目前支持中国、英国、美国)
29meidMEID(随机大小写)
30deviceidDEVICEID(设备编号)
31telphone固定电话(暂时只支持国内号码)
32citycode国内长途区号
33specialphone特殊电话号码(比如10086、110)
34capturetime当前时间绝对秒(10位数字)
35date当前时间,数据库日期格式{YYYYMMDD,hh:mm:ss}
36carbrand汽车品牌(中文)

单次请求数据返回上限为10000条(即number参数的取值区间为[1,10000])

使用方法:

http get请求

http://{IP}:8001/api/v1/fakerfactory?number={条数}&columns={字段参数[多个字段以英文逗号分隔]}

使用效果

性能评估

FakerFactory所在服务器硬件情况

硬件详情
CPU4 核 Intel(R) Xeon(R) CPU E5-2660 v3 @ 2.60GHz
MEM8G
NET10000Mb/s

使用ab对接口进行压测

参数项参数值
请求条件每条数据返回24个字段,一次GET请求返回1000条数据
请求次数10000
并发20

ab测试结果解读:

  • 模拟构造API请求随机生成10000000(1000 x 10000)条数据,耗时278.518秒。
  • 生成数据总量约7.28 GB(7821829529 bytes)
  • 吞吐率(Requests per second): 35.90
  • 用户平均请求等待时间(Time per request):557.037 ms
  • 服务器平均请求处理时间(Time per request,across all concurrent requests):27.852 ms
  • 90%的请求耗时低于662 ms

服务器性能表现

FakerFactory运行对CPU的资源消耗比较大,下面三个图为ab压测五分钟的硬件使用率

  • CPU

  • MEM

  • NET

环境依赖

  • 开发环境:go1.9以上
  • 运行环境:直接使用发布的二进制文件即可

鸣谢

  • gofakeit Random fake data generator written in go.
  • faker Faker is a Python package that generates fake data for you.
  • china_area_mysql 中国5级行政区域mysql库

About

伪造数据的API服务

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages