参考文章

一.前言

1.什么是datafaker?

datafaker是一个大批量测试数据和流测试数据生成工具,兼容python2.7和python3.4+,欢迎下载使用。github地址为:

https://github.com/gangly/datafaker

就是一个批量添加数据库数据的开源框架

2.为什么要用它?

因为在软件测试过程中,经常需要测试数据.

比如,查看一些数据,经常需要手动添加数据,手动添加有以下几个弊端

  1. 数据量大的时候,比较耗时
  2. 不够准确,比如号码格式,ip地址这些,不够准确
  3. 多表关联,需要手动添加

3.简介

3.1 能干什么?

datafaker是一个多数据源测试数据构造工具,可以模拟产生大部分常用数据类型,具有以下功能:

  1. 多种数据类型 包括常见数据库字段类型(整型、浮点型、字符型)、自定义类型(IP地址,邮箱,身份证号码等)
  2. 模拟多表关联数据 通过制定某些字段为枚举类型(从指定的数据列表里面随机选择),这样在数据量多的情况下能保证多表Join能关联上,查询到数据
  3. 支持批数据和流数据生成,可指定数据产生间隔时间
  4. 支持多种数据输出方式,包括屏幕打印、文件和远程数据源
  5. 支持多种数据源。目前支持关系型数据库、Hive、Kafka、Hbase、ES、File或屏幕打印。后面将扩展到Mongo,Kudu等数据源
  6. 可指定输出格式,目前支持text,json
  7. 生成自增主键

二. 环境准备

这里我是使用window版本的,如果是使用其他版本的,下载对应的安装包就可以了

1.python3.8(版本是3.X就可以了)

1.1 下载
链接: https://pan.baidu.com/s/1U746swKbzQ6g4vjTOs-7-w
提取码: y3n5

1.2 安装
python3.7安装教程

1.3 问题
(1)有时候window输入python会自动跳转到商城
在Windows 10 中配置了python的环境变量,但是在命令行中输入python会跳转到商店

这是由于在环境变量中path配置了 %USERPROFILE%\AppData\Local\Microsoft\WindowsApps 导致,只需要将该环境变量的配置去除即可解决
(2) pip 下载慢的问题(这个必须要配,不然等下下载会很慢)
配置pip国内镜像

2.pip(由于3.8版本自带,所以不需要安装,如果没有自带需要安装)

在这里插入图片描述

3. 安装datafaker

直接Ctrl + r ,然后cmd,打开命令行,输入命令就可以了

安装dadafaker

命令:

pip install datafaker
 卸载命令:

pip uninstall datafaker

更新到最新版本: 
pip install datafaker --upgrade

4.安装对应数据库包(这里我是使用的mysql)

安装mysqlclient

注意
(1) 不要下载错版本
python3.8,就要去下载python3.8的版本的mysqlclient
38就是3.8版本的
在这里插入图片描述

三.基本使用

1.查看版本号以及参数说明

$ datafaker --version
0.0.8

$ datafaker --help
usage: datafaker [-h] [--meta [META]] [--interval INTERVAL] [--version]
                 [--outprint] [--outspliter OUTSPLITER] [--locale LOCALE]
                 [--outfile OUTFILE] [--format FORMAT]
                 [--withheader]
                 [dbtype] [connect] table [num]

Generates SQLAlchemy model code from an existing database.

positional arguments:
  dbtype                data source type
  connect               connect info to the database
  table                 table to process
  num                   number of records to generate

optional arguments:
  -h, --help            show this help message and exit
  --meta [META]         meta file path
  --interval INTERVAL   meta file path
  --version             print the version number and exit
  --outprint            print fake date to screen
  --outspliter OUTSPLITER
                        print data, to split columns
  --locale LOCALE       which country language
  --format FORMAT       outprint and outfile format: json, text (default:
                        text)

2 在mysql中创建学生表

create table stu (
	id int unsigned auto_increment primary key COMMENT '自增id',
	name varchar(20) not null comment '学生名字',
	school varchar(20) not null comment '学校名字',
	nickname varchar(20) not null comment '学生小名',
	age int not null comment '学生年龄',
	class_num int not null comment '班级人数',
	score decimal(4,2) not null comment '成绩',
	phone bigint not null comment '电话号码',
	email varchar(64) comment '家庭网络邮箱',
	ip varchar(32) comment 'IP地址',
	address text comment '家庭地址'
) engine=InnoDB default charset=utf8;

编写元数据meta.txt,这是个学生表描述。 其中meta.txt文件内容为:

id||int||自增id[:inc(id,1)]
name||varchar(20)||学生名字
school||varchar(20)||学校名字[:enum(file://names.txt)]
nickname||varchar(20)||学生小名[:enum(鬼泣, 高小王子, 歌神, 逗比)]
age||int||学生年龄[:age]
class_num||int||班级人数[:int(10, 100)]
score||decimal(4,2)||成绩[:decimal(4,2,1)]
phone||bigint||电话号码[:phone_number]
email||varchar(64)||家庭网络邮箱[:email]
ip||varchar(32)||IP地址[:ipv4]
address||text||家庭地址[:address]

meta.txt文件中每行数据为元数据的一个字段描述,以||分割为三列,若以#开头,则忽略该行。

  • 第一列:字段名
  • 第二列:表字段类型
  • 第三列:字段注释,其中包含构造规则标识

name不加标记则会随机产生20字符内的字符串,可以加上改为:学生名字[:name]

其中学校名字[:enum(file://names.txt)]表示从本地文件names.txt中读取枚举数据,表示学校名称只能从下面这5所学校中随机产生。names.txt内容如下:

清华中学
人和中心
广东中学
猪场
旧大院
12345

后面将详细介绍构造规则说明

注意:meta.txt和names.txt需要放在同一个目录下,再运行datafaker命令 如果没有enum类型从文件读取数据,则不需要names.txt文件

3.从本地文件meta.txt中读取元数据,以,分隔符构造10条数据,打印在屏幕上

# 打印并不写进数据库
$ datafaker mysql mysql+mysqldb://root:admin@localhost:3306/job?charset=utf8 resume 10 --outprint --meta D:\File\Meta\meta.txt --outspliter ,,

1,,鲍红,,人和中心,,高小王子,,3,,81,,55.6,,13197453222,,mwei@gmail.com,,192.100.224.255,,江苏省西宁市梁平朱路I座 944204
2,,刘东,,清华中学,,高小王子,,3,,31,,52.4,,15206198472,,lili@kong.cn,,203.0.190.6,,内蒙古自治区嘉禾市兴山呼和浩特街E座 706421
3,,匡静,,人和中心,,歌神,,9,,84,,72.51,,18944398099,,zouchao@gmail.com,,203.1.53.166,,安徽省永安市沈河惠州街x座 345415
4,,王宇,,猪场,,逗比,,6,,89,,19.3,,18628114285,,na58@cai.net,,169.4.126.215,,山西省梧州县朝阳何路y座 846430
5,,陆桂芝,,猪场,,逗比,,8,,99,,92.22,,13304570255,,na55@ti.cn,,168.136.127.200,,江苏省英县徐汇尹街C座 908240
6,,顾阳,,猪场,,歌神,,9,,32,,43.14,,18025578420,,linping@pr.net,,174.50.222.39,,黑龍江省惠州县梁平大冶街Z座 611736
7,,杨洁,,人和中心,,鬼泣,,6,,35,,81.25,,13654306263,,minzhong@xiaxia.cn,,100.57.79.2,,湖北省琳市沙湾汪街V座 544660
8,,申璐,,人和中心,,鬼泣,,6,,14,,73.61,,13866020503,,changxiulan@chaoxia.cn,,198.248.254.56,,陕西省合山县东丽宁德街Q座 810017
9,,申强,,广东中学,,逗比,,7,,48,,90.65,,13915915013,,ysun@chao.cn,,169.210.122.39,,甘肃省冬梅县城北六安街Z座 619755
10,,李丹丹,,旧大院,,鬼泣,,3,,67,,87.63,,18899812516,,xiulanmo@qin.cn,,192.52.218.133,,湖南省宜都县萧山澳门街E座 791911
generated records : 10
printed records : 10
time used: 0.458 s
# 写入数据库
$ datafaker mysql mysql+mysqldb://root:admin@localhost:3306/jpa?charset=utf8 tb_resume 10 --meta D:\File\Meta\meta.txt
则将直接写入mysql中
解释:
mysql:数据库类型
mysql+mysqldb://root:admin@localhost:3306/test?charset=utf8:链接数据库的格式
	root:账号
	admin:密码
	localhost:ip
	3306:端口号
	test:数据库名称
	charset=utf8:编码格式
	tb_resume:表的名称
	10:生成几条数据
	--meta: 从本地读取生成规则
		D:\File\Meta\meta.txt: 规则文件的路径

若要再次运行,需要修改meta.txt文件中为id[:inc(id,11)]起始值为11或更大值,不然数据库会报主键重复错误。

构造规则优先级:


解析器将优先选择第三列的带规则标记的字段注释进行解析,如果不带标记,则选择第二列的字段类型进行解析。

这种好处是:

1)对应已经创建的数据表,用户可以用desc tablename 或者show full columns from tablename,将表shema查询复制下来,对用字段类型构造数据不满足的情况下,在注释里面进行打标机进行特殊处理

2)对于新表,在create table创建表时直接在注释里面打上标记。这种情况不用指定元数据文件。

四.命令行参数


datafaker参数包含4个必选参数和一些可选参数,如下表所示

参数名含义参数类型是否必选默认值备注
dbtype数据源类型string可选值为 rdb,mysql,hive, kafka, hbase, es, file
connect数据源连接信息string关系型数据库和hive为 sqlachemy的连接串 kafka为broker连接串 file为文件路径 hbase为thrift host和端口
table表名string将各种数据源操作单位都抽象为表,数据库中为表,kafka中为topic,file为文件名,hbase为表,es为索引和type,mongo为集合
num数据条数int其中kafka必须为1
auth账号密码string数据源的账号密码,以:分隔,例如 admin:12334
meta元数据文件string若设定该参数,则忽略从数据源连接信息中读取远数据
interval流数据产生间隔float1单位秒
version显示版本号bool
outprint是否在屏幕打印boolfalse若设置屏幕打印,则数据不会写文件或数据源
outspliter数据字段分割符string,屏幕打印,保存文件有效
locale语言类型stringzh_CN支持多国语言,en_US, zh_CN
format数据格式stringtextkafka 默认为json
withheader打印和存储到文件是否带表头boolFalse
batch每次批量写入数据源大小int1000
workers生成测试数据的线程数int4

五.数据构造规则


1.数据库常用类型


这部分数据类型可以不用指定元数据文件

  • 数值类型 支持大部分标准SQL数值数据类型。 这些类型包括严格数值数据类型( int、integer、smallint、decimal和numeric),以及近似数值数据类型(float、real和double, precision)
  • 日期和时间类型 表示时间值的日期和时间类型为datetime、date、timestamp、time和year。
  • 字符串类型 字符串类型指char、varchar、binary、varbinary、blob、text、enum和set。

2.可变数据库类型


类型名含义默认值备注
decimal(M,D, negative)M指定总的数据位数,D指定小数位数, negative指定正1负0decimal(4, 2, 1)指定4位数,2位小数的正浮点数,如78.23
string(min, max)min, max 指定字符串位数范围
date(start, end)start, end 指定日期范围如date(1990-01-01, 2019-12-12)
自增类型

inc(mark, start, step)

mark: 自增的变量名

start: 起始值, 默认值为1

step: 自增步长,默认值为1

inc(id)表示将当前列名为id的列,从1开始每次增长1, 可用于mysql的自增主键

inc(score, 100, 2)表示将当前列名为score的列,从100开始每次增长2

enum类型

enum类型表示随机从列表里随机选取一个对象,例如:

enum(2, 4, 5, 18) 表示每次从2,4,5,8这四个整数中随机选择一个

如果enum数组中只有一个对象,则表示从文件读取数据列表,每行一个对象:

enum(file://data.txt) 表示从当前目录的data.txt文件中读取列表。

enum类型可用来构造多表关联,比如两个表的某些字段都用同一个enum数据列表产生数据。

order_enum类型

与enum类型使用方法相同

不同在于,用于循环顺序产生枚举值。常用于相关联的多列产生值,例如一列为城市编码,一列为城市名,城市编码需要与城市名一一对应。关联的多列应该保持枚举值数量一致。

注意:由于多线程,不保证顺序严格按照枚举值列表顺序依次产生。但是能保证多相关列一一对应

详细请搜索查看issues

op类型

op类型表示从其他列中计算出值,例如:

op(c0+c3) 表示第一列值加上第四列值

op(c1*c4+c13) 表示第一列值乘上第五列值加上第十四列值

3.自定义扩展类型


address 地址
构造规则含义举例备注
country国家名中国
province省份河南
city城市名郑州市
city_suffix城市的后缀市或县
address地址河北省巢湖县怀柔南宁路f座 169812
country_code国家编码AO
district普陀
latitude地理坐标(纬度)68.0228435
longitude地理坐标(经度)155.964341
postcode邮编803511
street_address街道地址邯郸路W座
street_name街道名合肥路
street_suffix街、路
数值类型

构造规则含义举例备注
random_digit0~9随机数1
random_digit_not_null1~9的随机数9
random_element随机字母a
random_int随机数字44可设置范围,可以通过设置min,max来设置,默认0~9999,例如random_int(1,100)
random_letter随机字母e
random_number随机数字参数digits设置生成的数字位数例如random_number(2)生成2为数数字
booleanTrue/FalseFalse
numerify三位随机数字934
number一定数位的数字44322number(digits=None, fix_len=0, positive=0)有三个参数,digits表示多少位数字,fix_len表示是否固定长度(1表示固定长度,否则为1到digits长度)positive表示是否为正数(1为正数,-1为负数,0正负都可能)。number(18, 1, 1) 产生18位数固定长度的正整数
公司

构造规则含义举例备注
bs公司服务名transition open-source content
company公司名(长)天开信息有限公司
company_prefix公司名(短)浦华众城
company_suffix公司性质传媒有限公司
job职位项目执行/协调人员
信用卡、货币

构造规则含义举例备注
credit_card_expire信用卡到期日05/19
credit_card_full完整信用卡信息JCB 16 digit 霞 张 3514193766205948 08/21CVC: 436
credit_card_number信用卡号3500011993590161
credit_card_provider信用卡类型American Express
credit_card_security_code信用卡安全码190
currency_code货币编码HNL
日期、时间

构造规则含义举例备注
am_pmAM/PMAM
century世纪VII
date随机日期2014-05-18date(start_date,end_date,format) start_date表示从当前日期往前推的天数,默认值为-30y,前30年, end_date表示从当前日期往后推的日期数,默认值为今天 format为日期格式,默认值为%Y-%m-%d 例如date(-30d, +20d, %Y.%m.%d)
date_between指定范围内日期1997-08-29date_between(start_date,end_date,format) start_date表示开始日期,必填 end_date表示结束日期,必填 format为日期格式,默认值为%Y-%m-%d date_between(2017-01-01, 2019-12-02, %Y%m%d)
date_this_month当前月份的日期2019-03-13
date_this_year今年内的日期2019-03-09
date_time/datetime(1970年1月1日至今)时间可不带参数datetime, 或者带参数datetime(0)随机时间, datetime(1,%Y-%m-%d %H:%M) 数据产生时间 2010-06-15 04:07datetime(now,format)两个参数:now(0,1是否用当前时间, 默认为0表示随机事件,1为当前时间), format(时间格式 默认为%Y-%m-%d %H:%M:%S)
date_time_between指定范围时间2009-10-03 03:15:07用法同dates
month随机月份05
month_name随机月份(英文)December
time()随机24小时时间18:52:55
timezone随机时区Europe/Andorra
unix_time随机Unix时间203461583
timestamp随机Unix时间timestamp/timestamp(0) 随机时间戳, timestamp(1)当前数据产生时间戳带一个参数 默认为0
year随机年份2017
internet

构造规则含义举例备注
file_extension文件扩展名wav
file_name文件名(包含扩展名,不包含路径)werwe.jpg
file_path文件路径(包含文件名,扩展名)/home/
mime_typemime Typevideo/x-flv
company_email公司邮箱jieyan@14.cn
domain_name域名jq.cn
email邮箱kren@wei.cn
image_url随机URL地址https://www.lorempixel.com/470/178
ipv4IP4地址192.0.25.141
ipv6IP6地址206f:1ff0:374:2d5f:a6f8:69ef:4ba9:2d14
mac_addressMAC地址65:02:ed:82:c6:98
tld网址域名后缀(.com,.net.cn,等等,不包括.)cn
uriURI地址http://24.cn/
urlURL地址http://www.guiyinglei.cn/
user_name用户名ping51
user_agent随机user_agent信息
chromeChrome浏览器user_agent信息Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/5342 (KHTML, like Gecko) Chrome/27.0.819.0 Safari/5342
firefoxFireFox浏览器user_agent信息
internet_explorerIE浏览器user_agent信息
operaOpera浏览器user_agent
safariSafari浏览器user_agent信息
linux_platform_token随机Linux信息X11; Linux i686
isbn10随机ISBN(10位)1-02-136461-4
isbn13随机ISBN(13位)978-0-15-215169-0
文本类型

构造规则含义举例备注
paragraph随机生成一个段落
sentence随机生成一句话
text随机生成一篇文章不要幻想着人工智能了,至今没完全看懂一句话是什么意思
word随机生成词语hello
locale随机生成语言/国际信息niu_NZ各国本地化编码
md5随机生成MD5fd80f4681258a9ecb329ab12782dfbba
password随机生成密码)we3JViVB1可选参数:length:密码长度;special_chars:是否能使用特殊字符;digits:是否包含数字;upper_case:是否包含大写字母;lower_case:是否包含小写字母
sha1随机SHA1e9bb2fcd4b4089cc89c36636850ceafe779dbe58
sha256随机SHA256dd119cb2aec9b3d5557e56bb497757d42f82b32486ea92126942821d3b657957
uuid4随机UUID04aff886-8482-4069-9260-7917fd83982d
人物信息相关

构造规则含义举例备注
name全名单玉珍
name_female男性全名官平
name_male女性全名许颖
first_name
last_name
first_name_female女名
last_name_female女姓
first_name_male男名
last_name_male男姓
age人年龄23默认值 0-100
ssn身份证号350526193807198690
phone_number手机号13926798387
phonenumber_prefix手机号段157
profile档案信息
simple_profile简单档案信息{‘username’: u’kcui’, ‘name’: u’\u5415\u67f3’, ‘birthdate’: datetime.date(1993, 3, 28), ‘sex’: ‘F’, ‘address’: u’\u9752\u6d77\u7701\u4e0a\u6d77\u53bf\u6881\u5e73\u5174\u5b89\u76df\u8defQ\u5ea7 532381’, ‘mail’: u’juanpan@hotmail.com’}
其他杂项

构造规则含义举例备注
color_name随机颜色名Moccasin
hex_color随机HEX颜色#7f7cb6
rgb_color随机RGB颜色210,85,105
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐