前言
在数据相关的测试中,我们经常会需要去构造数据,随机生成数据。大部分人的写法会是用random 随机生成:
比如我们要生成随机的姓名,我们要构造下面的一段代码:
def
random_first_name
(
)
:
name
=
[
'赵'
,
'钱'
,
'孙'
,
'李'
,
'周'
,
'吴'
,
'郑'
,
'王'
,
'冯'
,
'陈'
,
'褚'
,
'卫'
,
'蒋'
,
'沈'
,
'韩'
,
'杨'
,
'朱'
,
'秦'
,
'尤'
,
'许'
,
'何'
,
'吕'
,
'施'
]
return
random
.
choice
(
name
)
def
random_last_name
(
)
:
head
=
random
.
randint
(
0xb0
,
0xf7
)
body
=
random
.
randint
(
0xa1
,
0xf9
)
val
=
f
'{head:x}{body:x}'
str_
=
bytes
.
fromhex
(
val
)
.
decode
(
'gb2312'
)
return
str_
name
=
random_first_name
(
)
+
random_last_name
(
)
看的出来,上面的构造的非常有限,如果需要更多的姓名,则需要加更多的姓名。
faker造数
python 中有个库可以造各种的数,姓名只需要一句语句就可以生成,非常的方便,这个库就是faker,源码请点击 ,官方手册
安装:pip install Faker
创建 Faker
安装完成后,使用时需要先创建一个 Faker 对象,创建方法有两种,一种是直接通过构造函数来创建,另一种是通过工厂函数来创建。
>>> from faker import Faker, Factory
>>> fake1 = Factory.create() # 通过工厂函数来创建
>>> fake1.name() # 随机生成一个姓名
'Brad Johnson'
>>> fake2 = Faker() # 通过构造函数来创建
>>> fake2.name() # 随机生成一个姓名
'Gregory Ritter'
本地化设置
如果faker()后面不加参数,默认都是英文的,如果要其他语言,可以加入相对应的参数,如下中文姓名
>>> fake = Faker("zh_CN")
>>> fake.name()
'杨玲'
随机生成的基本是两个跟三个字数的姓名。
faker支持以下类型的数据:
地址位置相关:城市,国家 ,街道, 经纬度,邮政编码
车牌号:
银行:
条码:
颜色相关:
公司:公司名、公司email、公司名前缀等
银行卡:卡号、有效期、类型等
货币:
时间日期:日期、年、月等
工作:
文件:文件名、文件类型、文件扩展名等
互联网:
手机号码类:手机号、运营商号段
person 姓名:性别、姓名等
身份证号码:
profile 人物属性:姓名、性别、地址、公司等
lorem 乱数假文:造数
其他类:uuid md5等
数据类型:字典,集合,列表
user_agent 用户代理:
地址位置相关:
>>> fake.city() # 城市名称
'沈阳县'
>>> fake.street_name() # 街道名称
'梅路'
>>> fake.country_code() # 国家编号
'GB'
>>> fake.longitude() # 经度
Decimal('56.184936')
>>> fake.address() # 地址
'云南省飞县东城石家庄路y座 289836'
>>> fake.province() # 省份
'黑龙江省'
>>> fake.latitude() # 纬度
Decimal('52.3888365'))
>>> fake.street_address() # 街道地址
'萧街M座'
>>> fake.city_suffix() # 市/县
'市'
>>> fake.postcode() # 邮政编码
'870817'
>>> fake.country() # 国家
'瓜德罗普岛'
>>> fake.street_suffix() # 街道后缀
'街'
>>> fake.district() # 区
'永川'
>>> fake.city_name() # 城市名称
'淮安'
>>> fake.building_number() # 建筑编号
'U座'
车牌号
>>> fake.license_plate() # 车牌号
'IQY 262'
银行
>>> fake.bank_country()
'GB'
>>> fake.iban()
'GB39SNOA2073712937476'
>>> fake.bban()
'BEJL4314200532225'
条码
该库非常实用,生成几位数字,可以自己拼凑。
>>> fake.ean8() # 8位条码
'63080728'
>>> fake.ean13() # 13位条码
'0334204949323'
>>> fake.ean(length=8) # 自定义位数条码,只能选8或者13
'81149919'
颜色
>>> fake.color_name() # 颜色名称
'PeachPuff'
>>> fake.safe_hex_color() # safe 颜色 16 进制编号
'#446600'
>>> fake.safe_color_name() # safe颜色名称
'olive'
>>> fake.rgb_color() # 颜色的 rgb 值
'136,232,80'
>>> fake.hex_color() # 颜色 16 进制编号
'#6e2538'
>>> fake.rgb_css_color()
'rgb(223,253,221)'
公司
>>> fake.catch_phrase()
'Customizable transitional policy'
>>> fake.company_prefix() # 公司名前缀
'昂歌信息'
>>> fake.company() # 公司名
'菊风公司传媒有限公司'
>>> fake.company_suffix() # 公司名后缀
'传媒有限公司'
>>> fake.bs()
'e-enable cross-platform technologies'
信用卡
>>> fake.credit_card_full(card_type=None) # 完整卡信息
'VISA 16 digit\n凯 袁\n4661497273827659 09/24\nCVC: 118\n'
>>> fake.credit_card_provider(card_type=None) # 卡的提供者
'JCB 16 digit'
>>> fake.credit_card_expire(start="now", end="+10y", date_format="%m/%y") # 卡的有效期
'08/26'
>>> fake.credit_card_number(card_type=None) # 卡号
'4271683569922518'
>>> fake.credit_card_security_code(card_type=None) # 卡的安全密码
'559'
货币
>>> fake.cryptocurrency()
('NEO', 'NEO')
>>> fake.cryptocurrency_code()
'ADA'
>>> fake.currency_code()
'BMD'
>>> fake.currency_name()
'Lebanese pound'
>>> fake.currency()
('BOB', 'Bolivian boliviano')
>>> fake.cryptocurrency_name()
'Dash'
时间日期
>>> fake.date_time(tzinfo=None) # 随机日期时间
datetime.datetime(1995, 12, 16, 13, 48, 16)
>>> fake.iso8601(tzinfo=None) # 以iso8601标准输出的日期
'1974-04-06T05:46:08'
>>> fake.date_time_this_month(before_now=True, after_now=False, tzinfo=None) # 本月的某个日期
datetime.datetime(2019, 9, 13, 18, 4, 54)
>>> fake.date_time_this_year(before_now=True, after_now=False, tzinfo=None) # 本年的某个日期
datetime.datetime(2019, 6, 15, 20, 11, 55)
>>> fake.date_time_this_decade(before_now=True, after_now=False, tzinfo=None) # 本年代内的一个日期
datetime.datetime(2015, 11, 13, 19, 39, 17)
>>> fake.date_time_this_century(before_now=True, after_now=False, tzinfo=None) # 本世纪一个日期
datetime.datetime(2008, 8, 22, 11, 36, 17)
>>> fake.date_time_between(start_date="-30y", end_date="now", tzinfo=None) # 两个时间间的一个随机时间
datetime.datetime(2003, 8, 22, 9, 3, 10)
>>> fake.timezone() # 时区
'Europe/Skopje'
>>> fake.time(pattern="%H:%M:%S") # 时间(可自定义格式)
'17:44:34'
>>> fake.am_pm() # 随机上午下午
'PM'
>>> fake.month() # 随机月份
'02'
>>> fake.month_name() # 随机月份名字
'August'
>>> fake.year() # 随机年
'1979'
>>> fake.day_of_week() # 随机星期几
'Sunday'
>>> fake.day_of_month() # 随机月中某一天
'02'
>>> fake.time_delta() # 随机时间延迟
datetime.timedelta(13371, 27637)
>>> fake.date_object() # 随机日期对象
datetime.date(2018, 11, 1)
>>> fake.time_object() # 随机时间对象
datetime.time(9, 27, 15)
>>> fake.unix_time() # 随机unix时间(时间戳)
1264315617
>>> fake.date(pattern="%Y-%m-%d") # 随机日期(可自定义格式)
'1988-05-20'
>>> fake.date_time_ad(tzinfo=None) # 公元后随机日期
datetime.datetime(504, 3, 18, 19, 23, 7)
工作
>>> fake.job()
'公司业务部门经理/主管'
文件
>>> fake.unix_partition(prefix=None) # unix 分区
'/dev/xvdl8'
>>> fake.file_name(category=None, extension=None) # 文件名
'规定.avi'
>>> fake.unix_device(prefix=None) # unix 设备
'/dev/xvdz'
>>> fake.file_path(depth=1, category=None, extension=None)
'/特别/下载.js'
>>> fake.file_extension(category=None) # 文件扩展信息
'html'
>>> fake.mime_type(category=None)
'video/mp4'
互联网
>>> fake.ipv4(network=False) # ipv4地址
'192.24.149.137'
>>> fake.ipv6(network=False) # ipv6地址
'5ad1:b6dc:6435:3857:8235:ddcb:6a28:a969'
>>> fake.uri_path(deep=None) # uri路径
'categories'
>>> fake.uri_extension() # uri扩展名
'.htm'
>>> fake.uri() # uri
'https://jingxia.cn/tags/author.html'
>>> fake.url() # url
'https://jinwei.net/'
>>> fake.image_url(width=None, height=None) # 图片url
'https://www.lorempixel.com/692/559'
>>> fake.domain_word() # 域名主体
'tiantao'
>>> fake.domain_name() # 域名
'yangzhong.cn'
>>> fake.tld() # 域名后缀
'com'
>>> fake.user_name() # 用户名
'jing32'
>>> fake.mac_address() # MAC地址
'bc:72:65:36:3d:19'
>>> fake.safe_email() # 安全邮箱
>>> fake.free_email() # 免费邮箱
>>> fake.company_email() # 公司邮箱
>>> fake.email() # 邮箱
电话号码
>>> fake.phonenumber_prefix() # 运营商号段,手机号前三位
159
>>> fake.msisdn()
'6165267401497'
>>> fake.phone_number() # 手机号
'15133115583'
身份证号码
>>> fake.ssn(min_age=18, max_age=90)
'222426196809082350'
人物
>>> fake.last_name() # 姓
'王'
>>> fake.first_name_male() # 男性名
'宇'
>>> fake.name() # 姓名
'秦亮'
>>> fake.first_name() # 名
'明'
>>> fake.last_name_male() # 男性姓
'袁'
>>> fake.name_male() # 女性姓名
>>> fake.romanized_name()
'Jun Tang'
>>> fake.first_name_female()
'莉'
>>> fake.last_name_female()
'羿'
>>> fake.name_female()
'张畅'
>>> fake.first_romanized_name()
'Li'
>>> fake.last_romanized_name()
'Tan'
profile 人物属性
>>> fake.profile(fields=None, sex=None)
{'job': '运输经理/主管', 'company': '四通传媒有限公司', 'ssn': '450603194211258524', 'residence': '内蒙古自治区红霞县金 平白路F座 762180', 'current_location': (Decimal('-41.335204'), Decimal('-175.561536')), 'blood_group': 'O+', 'website': ['https://shen.cn/', 'http://bw.com/', 'https://chao.cn/'], 'username': 'qianggong', 'name': '张敏', 'sex': 'F', 'address': '广东省乌鲁木齐县秀英蔡街W座 203230', 'mail': 'jiewei@gmail.com', 'birthdate': datetime.date(1953, 3, 3)}
>>> fake.simple_profile(sex=None)
{'username': 'li28', 'name': '韩淑珍', 'sex': 'M', 'address': '上海市淑珍县西夏谌街B座 234702', 'mail': 'ganggao@yahoo.com', 'birthdate': datetime.date(1915, 12, 10)}
lorem 乱数假文
>>> fake.paragraphs(nb=3, ext_word_list=None)
['对于社区提高.那么地方方法使用如此.完全他的程序建设还有生产.', '知道其他销售.运行一些主要状态功能网络.那么电话系统没有 同时今天拥有.', '进行包括觉得.报告单位内容认为图片教育一定所以.公司其中继续一样.']
>>> fake.word(ext_word_list=None) # 随机单词
'搜索'
>>> fake.text(max_nb_chars=200, ext_word_list=None) # 随机生成一篇文章
>>> fake.sentences(nb=3, ext_word_list=None)
['登录准备准备计划成功电子大学.', '来自而且之间之后.', '得到朋友工具.']
>>> fake.paragraph(nb_sentences=3, variable_nb_sentences=True, ext_word_list=None)
'音乐搜索解决本站也是项目数据.应该介绍不能所有位置系列.汽车来自美国一起.'
>>> fake.words(nb=3, ext_word_list=None) # 随机生成三个字段
['威望', '参加', '其他']
>>> fake.sentence(nb_words=6, variable_nb_words=True, ext_word_list=None) # 随机生成一个句子
'主题游戏任何而且政府企业一次.'
user_agent 用户代理
>>> fake.mac_platform_token()
'Macintosh; U; PPC Mac OS X 10_12_2'
>>> fake.firefox()
'Mozilla/5.0 (Windows 98; wa-BE; rv:1.9.0.20) Gecko/2018-01-04 15:49:38 Firefox/3.6.4'
>>> fake.windows_platform_token()
'Windows NT 4.0'
>>> fake.safari()
'Mozilla/5.0 (iPod; U; CPU iPhone OS 3_0 like Mac OS X; he-IL) AppleWebKit/535.26.5 (KHTML, like Gecko) Version/3.0.5 Mobile/8B118 Safari/6535.26.5'
>>> fake.chrome(version_from=13, version_to=63, build_from=800, build_to=899)
'Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_6 like Mac OS X) AppleWebKit/535.2 (KHTML, like Gecko) CriOS/38.0.850.0 Mobile/99R322 Safari/535.2'
>>> fake.opera()
'Opera/9.68.(Windows NT 5.01; dz-BT) Presto/2.9.190 Version/11.00'
>>> fake.mac_processor()
'U; PPC'
>>> fake.linux_platform_token()
'X11; Linux i686'
>>> fake.linux_processor()
'i686'
>>> fake.internet_explorer()
'Mozilla/5.0 (compatible; MSIE 9.0; Windows 95; Trident/3.0)'
>>> fake.user_agent()
'Mozilla/5.0 (iPad; CPU iPad OS 10_3_3 like Mac OS X) AppleWebKit/534.1 (KHTML, like Gecko) CriOS/44.0.840.0 Mobile/78N065 Safari/534.1'
其他
>>> fake.binary(length=10) # 随机二进制字符串(可指定长度)
b'\xf6O\xc9k\xb2\xde\xb6\xcb\x99\xd3'
>>> fake.language_code() # 随机语言代码
'is'
>>> fake.md5(raw_output=False) # 随机md5,16进制字符串
'009ed11f49fe5848261a99aa4c9af448'
>>> fake.sha1(raw_output=False) # 随机sha1,16进制字符串
'8ac0e9980f880860b6e45ae6fd257cc847b7ae8d'
>>> fake.sha256(raw_output=False) # 随机sha256,16进制字符串
'033151f173f4a389e38e7df2363d89741f752c474e7bdfa2ee0a794bf0b505b5'
>>> fake.boolean(chance_of_getting_true=50) # 随机真假值(得到True的几率是50%)
False
>>> fake.null_boolean() # 随机真假值和null
>>> fake.null_boolean()
True
>>> fake.password(length=10, special_chars=True, digits=True, upper_case=True, lower_case=True) # 随机密码(可指定密码策略)
')^A5RzU(+L'
>>> fake.locale() # 随机本地代码
'ff_SN'
>>> fake.uuid4() # 随机uuid
'61bad688-4578-4054-8b2d-99127355a7cb'
数据类型:
>>> fake.pyint() # 随机int
5638
>>> fake.pyfloat(left_digits=None, right_digits=None, positive=False) # 浮点数
-46672778.68
>>> fake.pydecimal(left_digits=None, right_digits=None, positive=False) # 随机高精度数
Decimal('-918941537764.35')
>>> fake.pystr(min_chars=None, max_chars=20) # 随机字符串(可指定长度)
'DuEkmAaHCSsGqIoKxIaf'
>>> fake.pybool() # 随机bool值
True
>>> fake.pyiterable(nb_elements=10, variable_nb_elements=True) # 随机iterable
{'http://www.ge.cn/faq.htm', datetime.datetime(2002, 7, 20, 5, 45, 41), datetime.datetime(2002, 3, 3, 17, 29), 'http://chengdai.cn/', 2766, Decimal('-541462.193'), datetime.datetime(2006, 4, 27, 9, 30, 31), Decimal('9514453257546.6'), 48757519893510.9, 'SlqBsyBIWbfOYjdScdZi', datetime.datetime(1995, 5, 11, 0, 45, 37), datetime.datetime(2014, 9, 13, 20, 40, 49), 'http://www.jieming.cn/app/main/'}
>>> fake.pylist(nb_elements=10, variable_nb_elements=True ) # 随机生成一个list
[-797200585.91691, 'ChMuVThcJFexTyybIZdP', 'http://www.dongsong.cn/post/', 'jXarFZXQdVDidBxWnyuW', 6540, 61715.5038]
>>> fake.pydict(nb_elements=10, variable_nb_elements=True) # 随机字典
{'项目': datetime.datetime(1988, 4, 8, 10, 14, 37), '经营': 'https://37.cn/tag/about.php', '音乐': 'iJehjluNhLxpjQyETpGe', '不过': 360361.44765506, '看到': 'HKdyTUwOTtuuTZSeBLUd', '这种': 608}
>>>fake.pyset(nb_elements=10, variable_nb_elements=True) # 随机set
{Decimal('75230162994756.0'), 'https://vb.cn/posts/wp-content/explore/post.jsp', 'fkNibFsCKmspBhqIDOzj', Decimal('-50.945'), 7502857762691.5, 4821, datetime.datetime(2015, 1, 18, 12, 24, 7), 'ytan@gmail.com', Decimal('-948450382601775.0'), 'VxoBaMyruWWNxBYogiih'}
>>> fake.pytuple(nb_elements=10, variable_nb_elements=True) # 随机tuple
(1.0, Decimal('712394408090.0'), 'shenjie@juan.net', 'wwDOBbrKgKBnfVVkFtat', 'http://www.fangchen.cn/', 'http://yongsun.cn/wp-content/author.htm', 'http://fang.cn/register/', 'asong@hotmail.com', -437705.8549)
>>> fake.pystruct() # 随机生成3个有10个元素的python数据结构
(['xtang@gmail.com', 'pPKapYkoglckHXvvFzOy', 'https://tao.cn/register/', 52132442.0, 'nqcmGaTyutwlrNmQFelB', 'fCTLmYtCzGNCBzXfkuPR', 'fQIFuGeZLsSAjVGNIMOy', -59823.150719, Decimal('39.5924463005'), 'gLfQaEWisjBTASVwsvGS'], {'组织': Decimal('-3119855660523.2'), '的人': 'vrlSpplVjLSjQFFIILxC', '查看': datetime.datetime(1980, 8, 3, 2, 55, 6), '网站': 50625548540.294, '国际': 5509, '研究': 'lYNqIAYUinpMMWtZvvxv', '报告': Decimal('936667412.0'), '能力': 2908, '如何': 3776, '记者': 'TGTAPTpmrLaNjDLvtQtC'}, {'新闻': {0: 752728.504146, 1: ['wZLXsphxBUeHUsQfDJlm', 4038, 5954], 2: {0: 'xIuByEBprqdUYKCEqWMs', 1: 'uwlFSlwUAofzeuQIEFfV', 2: [Decimal('-235588585.403754'), Decimal('-5952248299825.2')]}}, '更多': {1: 2220, 2: [datetime.datetime(1982, 2, 2, 15, 23, 7), 'http://www.lei.cn/tag/register/', 'lei58@gmail.com'], 3: {1: 'http://www.liangwen.cn/', 2: 'https://www.yongshen.cn/list/category/explore/login/', 3: ['gTlVuJTWsgaTFCfHmALV', 'nhqTvUFbJdFRJLYFVHml']}}, '关于': {2: 8769.9071665378, 3: [3627, 'PuzjnaSufiuooeFPxnOR', 25986638362847.0], 4: {2: 'PynmCRmVubIwQQVOqvNK', 3: datetime.datetime(1973, 10, 23, 1, 48, 4), 4: ['jLgmMBVRMhlbOcMTnXrT', 3671]}}, '她的': {3: 4414, 4: ['eOgObVDQjUtGxkztDzwI', 7293, Decimal('393.7')], 5: {3: -0.655502, 4: datetime.datetime(2018, 2, 3, 18, 39, 55), 5: ['dujie@qiangguiying.cn', 1493]}}, '这是': {4: 'xPTUJlShneJmloyUnrgn', 5: [Decimal('804874.734'), 3924, 'https://www.fangfu.cn/explore/explore/homepage.htm'], 6: {4: 'http://www.01.cn/tag/categories/tags/post/', 5: 'nmo@hotmail.com', 6: [datetime.datetime(2016, 11, 10, 2, 55, 18), datetime.datetime(2010, 2, 24, 19, 23, 52)]}}, '行业': {5: 6033, 6: [9524, 9491, 'xEOzJpdhDNDyusemVcqp'], 7: {5: 'FwIQeNCPOXeLWTUARGFy', 6: Decimal('-957.51384911'), 7: [7046, -4881117.668853]}}, '自己': {6: 'yongfan@yinbai.cn', 7: [datetime.datetime(1998, 10, 19, 7, 26, 18), 2314, 'https://www.juan.net/blog/categories/post/'], 8: {6: 'EzuKYpuuFnvNXJrCCrKX', 7: 2640449.87414, 8: ['http://shi.cn/homepage.htm', datetime.datetime(2007, 8, 19, 13, 28, 35)]}}, '那么': {7: -4384571.418821, 8: ['http://jun.cn/post/', datetime.datetime(1970, 6, 30, 23, 47, 42), 'https://guiyingjia.cn/list/list/search/'], 9: {7: 'yang99@aj.cn', 8: 5305, 9: [datetime.datetime(1994, 7, 24, 5, 1, 15), Decimal('6655.855368')]}}, '制作': {8: 'tao90@wen.cn', 9: ['tlSasBwWZGorKCSLniZQ', 'QABzPBVFoXQJCLfkgKXQ', 'VXIrZMRwbhPXODZZHBjK'], 10: {8: 'LUgJGdTLXddLJThLkRIp', 9: 'fLlzbAkcEUgJekIIjWRE', 10: [2732, datetime.datetime(2004, 3, 27, 14, 23, 58)]}}, '教育': {9: 8291, 10: [8563, 'junchang@hotmail.com', 377], 11: {9: Decimal('8380226.9282'), 10: Decimal('459180.2296787'), 11: [-490270.2, 8530]}}})
参考连接:
https://www.jianshu.com/p/20e41fc65dc8