自动化测试造数-Faker库
Whisper Lv4

安装

1
pip install Faker

初始化一个Faker的实例

1
2
from faker import Faker  
f = Faker()

简单使用

1
2
3
4
5
6
7
from faker import Faker
fake = Faker()

fake.name() # 随机一个名称
fake.address() # 随机一个地址
fake.text() # 随机一段文本

多语言

语言默认为en-US,可以通过在conftest中的faker_session_locale修改。
可以设置多个语言,给每个语言一个权重,随机时会根据权重返回某种语言。如果传入的参数名不存在,则会默认使用英文。

常用:

1
2
3
4
zh_CN
en_US
en_GB
ko_KR

还有一些其他的,不过一般我们测试的时候只用中文英文,如果有多语言测试的需求可以写一个配置文件,每次更换语言或者随机语言来测试。

1
faker = Faker("zh_CN")  

说明模拟数据

facker的mock data都是通过providers package提供的。需要使用哪个providers就需要导入对应的包。

1
2
3
4
5
6
7
from faker import Faker
from faker.providers import internet

fake = Faker()
fake.add_provider(internet)

print(fake.ipv4_private())

常用模拟数据

接下来依次说明不同providers的作用。f为Faker实例。

人名

1
2
3
4
5
6
7
8
9
f.name() # '董建国'
f.name_female() # '李凤兰'
f.name_male() # '敖磊'
f.first_name() # '兰英'
f.first_name_female() # '畅'
f.first_name_male() # '岩'
f.last_name() # '王'
f.last_name_female() # '夏'
f.last_name_male() # '苏'

电话号码

1
2
f.country_calling_code() # '+974'
f.phone_number() # '18787000124'

身份识别码

1
f.ssn() # '430822194611241875'

日期时间

1
2
3
4
5
6
7
8
9
f.date() # '1972-09-04'
f.day_of_week() # '星期三'
f.iso8601() # '1978-07-03T23:04:33'
f.month() # '01'
f.month_name() # '二月'
f.day_of_month() # '29'
f.time() # '12:33:14'
f.timezone() # 'Europe/Sofia'
f.year() # '2017'

地址

1
2
3
4
5
6
7
8
9
10
11
12
f.address() # '四川省莉县花溪韩路d座 448665'
f.city() # '哈尔滨市'
f.city_suffix()
f.current_country() # "People's Republic of China"
f.current_country_code() # 'CN'
f.country() # '土耳其'
f.country_code() # 'PY' 国家的简称码
f.postcode() # '143563'
f.street_address() # '兰州街u座'
f.district()
f.street_name() # '南京街'
f.street_suffix() # '街' 类似于什么什么‘路’,什么什么‘街’

地理位置

1
2
3
f.coordinate() # '158.520628'
f.latitude() # '23.364486'
f.longitude() # '-42.130718'

银行

1
f.bban() # 'VPEA89639484229785'

信用卡

1
2
3
4
5
f.credit_card_full() # 'VISA 16 digit\n颖 单\n4138084319004488 09/28\nCVC: 687\n' 全部信息
f.credit_card_expire() # '02/25' 过期信息
f.credit_card_number() # '4488057676892097'
f.credit_card_provider() # 'VISA 19 digit' 信用卡提供商名称
f.credit_card_security_code() # '017'

颜色

1
2
3
4
5
f.color() # '#d3cb2a'
f.color(hue='red') # 红色系
f.color_name() # 'Olive'
f.rgb_color() # '53,18,40'
f.rgb_css_color() #'rgb(231,139,110)'

企业

1
2
3
4
5
6
f.bs() # 'deploy B2B niches'
f.company() # '戴硕电子科技有限公司'
f.company_suffix() # '信息有限公司' 公司的后缀
f.company_email() # 'eyu@zeng.cn'
f.company_prefix() # '东方峻景' 公司前缀
f.job() # '电信网络工程师'

数字

1
2
3
f.random_int() # 6063
f.random_digit() # 9
f.random_number() # 1847439

货币

1
2
3
f.cryptocurrency_name() # 'SwiftCoin'
f.currency_code() # 'KYD'
f.pricetag() # '$5,453.54'

文本段落

1
2
3
4
5
6
7
8
f.text() # '上海感觉觉得根据的话是一.空间标题联系是否为了之间.\n学习各种那个如何然后然后.所以人民生产操作学校他的国内.责任技术今年价格起来的话世界.\n帮助功能加入电话参加以及投资.主要不是说明质量一点.报告其他关于.\n一般过程没有是一一些研究积分.对于必须精华活动不会.\n虽然文章是否城市作者.网络当前的话只是也是.\n在线内容没有主题情况详细.商品主要解决电话直接经营.实现用户游戏网站那个手机直接.'
f.texts() # ['一起电影能够信息因此学生.资料一定显示欢迎.必须美国状态之间认为语言教育图片.程序最大具有在线可是如此系统.\n发生来源企业根据.已经在线包括国际国家.电子工作基本大学.原因销售根据时候.\n由于活动不同各种.\n阅读基本得到一起.孩子部门那些日期简介女人.有限业务浏览.\n以下个人或者市场论坛作品语言.软件因为资料阅读世界工作.\n今天方法决定之间网上当然全国.', '以后我们不是投资作为还有管理学生.可以美国查看.\n国内这么点击没有点击.电脑大家方法或者成为.规定显示电话搜索规定一起有关.你们帖子各种可以看到.\n应用只是资源是一作为男人发表.已经更新所以不断组织具有他的方面.下载软件发生如此.\n需要比较开发以上数据.广告参加需要组织.\n只有一直学习位置.国内之间发布建设以上首页进行.软件进行大家作者如何可以.', '得到东西网上到了都是搜索.时间完全发布.\n来自产品使用你们.网上空间更新地方.您的责任希望全部.\n起来任何操作价格女人.环境责任浏览提高查看.\n然后论坛成功女人社会销售能够.\n出来而且出现在线什么文化工程.合作单位直接作品方面方法用户.\n看到那么一定虽然回复信息知道.处理浏览所以当前其实应该.\n成为公司的话生产孩子.而且发现浏览大学主题希望.关于发表帮助那么.']
f.word() # '那些'
f.words() # ['之间', '人民', '时候']
f.paragraph() # '电脑人员进入完成.经营支持国内.一个工具选择时间需要政府标准.'
f.paragraphs() # ['电脑今天你们信息不会环境.时间那些阅读为了关于.所以全国手机原因专业其中.', '一下服务名称你的一下怎么首页.在线时间法律.', '更新查看法律那些这样非常.设计大家还有环境相关世界.']
f.sentence() # '发生以上提高得到电脑.'
f.sentences() # ['记者环境相关登录.', '部分位置显示详细.', '地方生活东西其实.']

各种格式的文本

1
2
3
4
f.boolean() # True
f.md5()
f.password(length=8) # 'h!8dFM3p'
f.uuid4() # '08cd77ef-a0ea-4645-a346-1590f3e429b2'

代理

1
2
3
4
5
f.chrome() # 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_7_8) AppleWebKit/533.0 (KHTML, like Gecko) Chrome/34.0.865.0 Safari/533.0'
f.firefox() # 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/532.1 (KHTML, like Gecko) FxiOS/18.6l2208.0 Mobile/99Q085 Safari/532.1'
f.user_agent() # 'Mozilla/5.0 (compatible; MSIE 5.0; Windows NT 4.0; Trident/4.0)' 这种不制定浏览器类型,随机返回一种
f.android_platform_token() # 'Android 1.6'
f.ios_platform_token() # 'iPhone; CPU iPhone OS 12_4_8 like Mac OS X'

网络信息

1
2
3
4
5
6
7
8
9
10
11
12
13
f.domain_name() # 'gu.net' 域名名称
f.free_email() # 'xia55@gmail.com'
f.hostname() # 'desktop-50.naming.cn' 全域名
f.http_method() # 'PUT' http方法
f.image_url() # 'https://placekitten.com/246/563'
f.image() # 是图片的二进制码
f.ipv4_private() # '172.20.65.243'
f.ipv4_public() # '118.117.90.82'
f.ipv6() # 'e4d1:2d57:d354:a25e:2803:a6d5:f0d4:e919'
f.mac_address() # 'ed:48:9e:1d:38:c3' 随机一个mac地址
f.port_number() # 227 随机端口号
f.url() # 'https://www.guiying.cn/'
f.user_name() # 'yanyan' 随机用户名

emoji

1
f.emoji() # '👮🏽'

结合Pytest fixtures使用

用pytest做测试时,可以结合faker使用更方便。

1
2
def test_faker(faker):
assert isinstance(faker.name(), str)