<<返回python首页 python

《Python 应用案例》

批量生成模拟数据的Python faker模块

在软件开发、测试过程中,常需要使用一些测试数据,一般要么使用已有的系统数据,要么需要手动制造一些数据。在手动制造数据的过程中,可能需要花费大量精力和工作量,既繁复又容易出错,而且,部分数据的手造工作无法保障:比如UUID类数据、MD5、SHA加密类数据等。本节将介绍Faker模块,一款基于Python的测试数据生成工具,用来创建伪数据,无论是用于初始化数据库,创建XML文件,或是生成压测数据,Faker都是不错的选择。

批量生成模块数据的Python faker模块

安装Faker包

!pip3 install faker -i https://pypi.tuna.tsinghua.edu.cn/simple

导入Faker包并进行地区设置

from faker import Faker
faker=Faker(locale='zh_CN')

关于初始化参数locale:为生成数据的文化选项,默认为en_US,只有使用了相关文化,才能生成相对应的随机信息(比如:名字,地址,邮编,城市,省份等)

可选择的地区信息

ar_EG - Arabic (Egypt)        阿拉伯语 - 埃及
ar_PS - Arabic (Palestine)    阿拉伯语 - 巴勒斯坦
ar_SA - Arabic (Saudi Arabia)    阿拉伯语 - 沙特阿拉伯
bg_BG - Bulgarian        保加利亚语 - 保加利亚
cs_CZ - Czech               捷克语 - 捷克
de_DE - German            德语 - 德国
dk_DK - Danish            丹麦语 - 丹麦
el_GR - Greek            希腊语 - 希腊
en_AU - English (Australia)    英语 - 澳大利亚
en_CA - English (Canada)    英语 -  加拿大
en_GB - English (Great Britain)    英语 - 英国
en_US - English (United States)   英语 -  美国
es_ES - Spanish (Spain)        西班牙语 - 西班牙
es_MX - Spanish (Mexico)        西班牙语- 墨西哥
et_EE - Estonian            爱沙尼亚语 - 爱沙尼亚
fa_IR - Persian (Iran)        波斯语 - 伊朗
fi_FI - Finnish        芬兰语 - 芬兰
fr_FR - French         法语 - 法国
hi_IN - Hindi            印地语 - 印度
hr_HR - Croatian    克罗地亚语 - 克罗地亚
hu_HU - Hungarian    匈牙利语 - 匈牙利
hy_AM - Armenian 亚美尼亚语 - 亚美尼亚
it_IT - Italian       意大利语 -  意大利
ja_JP - Japanese    日语 - 日本
ko_KR - Korean    朝鲜语 - 韩国
ka_GE - Georgian (Georgia)  格鲁吉亚语 - 格鲁吉亚
lt_LT - Lithuanian    立陶宛语 - 立陶宛
lv_LV - Latvian    拉脱维亚语 - 拉脱维亚
ne_NP - Nepali    尼泊尔语 - 尼泊尔
nl_NL - Dutch (Netherlands)    德语 - 荷兰
no_NO - Norwegian    挪威语 - 挪威
pl_PL - Polish    波兰语 - 波兰
pt_BR - Portuguese (Brazil)    葡萄牙语  - 巴西
pt_PT - Portuguese (Portugal)    葡萄牙语 - 葡萄牙
ru_RU - Russian    俄语 - 俄国
sl_SI - Slovene   斯诺文尼亚语 - 斯诺文尼亚
sv_SE - Swedish    瑞典语 - 瑞典 
tr_TR - Turkish         土耳其语 - 土耳其
uk_UA - Ukrainian    乌克兰语 - 乌克兰
zh_CN - Chinese (China)    (简体中文)
zh_TW - Chinese (Taiwan)  (繁体中文)

生成数据

使用faker.Factory.create()创造并初始化faker生成器,faker生成器可以通过访问按所需数据类型命名的属性来生成数据

for i in range(10):
    print('name:', faker.name(),'    address:', faker.address())

Provider

faker 库在设计上,为了解耦,将 Provider 对象做成了 Faker 对象的”插件“。Faker 可以添加一个个 Provider 对象,Provider 对象为 Faker 对象提供了生成某项数据的核心实现。就相当于 Faker 对象是一个生成器,它的生成功能依赖于什么呢?依赖于 Provider,是 Provider 提供给了 Faker 对象生成某项数据的能力。

正是因为 Faker 对象内置了一些 Provider 对象,Faker 对象才可以生成刚才所要求的姓名、地址和文本。

那么这时候我们肯定就很好奇了,既然 Faker 对象有生成数据的能力,那么它一定内置了一些默认的 Provider 对象,下面我们来打印看一下:

from faker import Faker

faker = Faker('zh_CN')
print(faker.providers)

通过名字可以看到有 useragent、phonenumber、isbn、creditcard 等 Provider,其中具有语言差异化的 Provider 还单独区分了语言,比如 phonenumber 代表电话号码,这个不同语言的不同,所以这里就又分了一层 zh_CN,作了语言的区分。

这样一来,通用的 Provider 就直接处在某个 Provider 类别的模块中,具有语言差异的 Provider 就又根据不同的语言进一步划分了模块,设计上非常科学,易扩展又不冗余。

知道了 Faker 具有这么多 Provider 之后,我们来看看刚才调用的 name、address 等方法又和 Provider 有什么关系呢?

我们将 name、address、text 等方法打印一下看看:

from faker import Faker

faker = Faker('zh_CN')
print('name:', faker.name)
print('address:', faker.address)
print('text:', faker.text)

不同类别的测试数据

地址信息

print(faker.address())
print(faker.building_number())
print(faker.city())
print(faker.city_name())
print(faker.city_suffix())
print(faker.country())
print(faker.country_code(representation="alpha-2"))
print(faker.district())
print(faker.postcode())
print(faker.province())
print(faker.street_address())
print(faker.street_name())
print(faker.street_suffix())

公司信息

print(faker.bs())
print(faker.catch_phrase())
print(faker.company())
print(faker.company_prefix())
print(faker.company_suffix())

假名字

print(faker.first_name())
print(faker.first_name_female())
print(faker.first_name_male())
print(faker.last_name())
print(faker.last_name_female())
print(faker.last_name_male())
print(faker.last_romanized_name())
print(faker.name())
print(faker.name_female())
print(faker.name_male())

总结

faker库还可以生成其它如User-Agent的随机数据,可以在线继续尝试,具体的可用 API 可以看 https://faker.readthedocs.io/en/master/locales/zh_CN.html,这里面列出来了可用的所有方法。

移动端设备除iPad Pro外,其它移动设备仅能阅读基础的文本文字。
建议使用PC或笔记本电脑,浏览器使用Chrome或FireFox进行浏览,以开启左侧互动实验区来提升学习效率,推荐使用的分辨率为1920x1080或更高。
我们坚信最好的学习是参与其中这一理念,并致力成为中文互联网上体验更好的学练一体的IT技术学习交流平台。
您可加QQ群:575806994,一起学习交流技术,反馈网站使用中遇到问题。
内容、课程、广告等相关合作请扫描右侧二维码添加好友。

狐狸教程 Copyright 2021

进入全屏