造数据神器Faker,一个有趣又实用的Python第三方库

转载请注明出处❤️

作者:测试蔡坨坨

原文链接:caituotuo.top/97d6398b.html


你好,我是测试蔡坨坨。

众所周知,Python语法简洁,功能强大,通过简单的代码就能实现许多实用的功能,上到人工智能,下到少儿编程,很大原因得益于它有强大的标准库以及非常丰富的第三方库,有很多现成的轮子可以用。

今天,分享一个有趣又实用的Python第三方库,造数据神器Faker。

前言

在日常测试工作中,少不了造数据,你的测试数据是不是长这样呢?

1
2
3
4
5
test
test1
aaa
这是一段文字
这是一段很长长长长长长长长长长长长长长长长长长长长长长长长长长长长的数据

随机数据不知道怎么生成,用尽毕生所学,瞬间感觉江郎才尽:cry:

再者说,人的大脑是有限的,而我们的世界是无限的,当我们需要生成测试数据时,往往会按照我们的标准数据生成,也就是生成的数据并不完全随机,而是按照我们的固定模式生成。有没有办法能按照相对随机的方式生成数据呢?

有了Faker,就能轻松帮我们创造一些看似真实的“假数据”,是一款非常好用的数据生成神器。

安装

官网:https://faker.readthedocs.io

1
pip3 install faker

Faker 对象初始化

1
2
3
4
5
6
7
8
9
10
from faker import Faker

faker = Faker()

# 姓名、邮箱、地址、长文本
print("name:", faker.name())
print("email:", faker.email())
print("address:", faker.address())
print("text:", faker.text())
print("state", faker.state())

多语言多区域支持

例如:zh_CN(简体中文)、zh_TW(繁体中文)、zh_TW(台湾)、en_US(美国英文)、en_GB(英国英文)、de_DE(德文)、ja_JP(日文)、ko_KR(韩文)、fr_FR(法文)……

1
faker_zh = Faker("zh_CN")

需要注意的是不同区域下的方法并不是完全一致的,比如中国有省的概念 faker_zh.province(),而美国就没有省的概念,可能就是州 faker_zh.state(),因此在美国的区域下用province()就会报错

常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# 中国区域 人物相关
# 姓名相关
print("姓名:", faker_zh.name())
print("女性姓名:", faker_zh.name_female())
print("男性姓名:", faker_zh.name_male())
print("男性名:", faker_zh.first_name_male())
print("男性姓:", faker_zh.last_name_male())
print("罗马名:", faker_zh.romanized_name())
# 联系方式
print("邮箱:", faker_zh.email())
print("手机号:", faker_zh.phone_number())
print("手机号段:", faker_zh.phonenumber_prefix())
# 身份
print("身份证号:", faker_zh.ssn())
# 公司
print("公司名称(长):", faker_zh.company()) # 快讯网络有限公司
print("公司名称(短):", faker_zh.company_prefix()) # 快讯
print("公司性质:", faker_zh.company_suffix()) # 网络有限公司
print("职位:", faker_zh.job())
print("信用卡号:", faker_zh.credit_card_number())
print("信用卡到期日:", faker_zh.credit_card_expire())
print("信用卡信息:", faker_zh.credit_card_full())
print("信用卡信息:", faker_zh.credit_card_full())
print("信用卡类型:", faker_zh.credit_card_provider())

# 网络信息
print("域名:", faker_zh.domain_name())
print("url:", faker_zh.url())

# 浏览器信息
print("谷歌浏览器user_agent信息:", faker_zh.chrome()) # 在做接口测试时请求头经常需要传一个user_agent
print("火狐浏览器user_agent信息:", faker_zh.firefox())
print("user_agent信息:", faker_zh.user_agent())

# 文件信息
print("文件扩展名:", faker_zh.file_extension()) # mp4
print("文件名(包含扩展名):", faker_zh.file_name()) # 图片.bmp
print("文件路径:", faker_zh.file_path())
print("随机mime type:", faker_zh.mime_type())

# 随机数
print("三位随机数:", faker_zh.numerify())
print("0-9随机数:", faker_zh.random_digit())
print("1-9随机数:", faker_zh.random_digit_not_null())
print("随机数,默认0-9999,可以设置min、max:", faker_zh.random_int()) # random_int(50, 100)
print("随机数字,参数digits可以设置位数:", faker_zh.random_number(8))
print("浮点数:", faker_zh.pyfloat(left_digits=5, right_digits=2, positive=True)) # 69156.22 positive是否只有正数
print("decimal:", faker_zh.pydecimal(left_digits=5, right_digits=2, positive=True))

# 文本类型
print("随机字符串:", faker_zh.pystr())
print("随机词语:", faker_zh.word())
print("随机文章(虽然至今没有一句能看懂什么意思):", faker_zh.text())
print("随机uudi:", faker_zh.uuid4())

# 随机日期
print("随机生成指定范围内的日期:", faker_zh.date_between())

# 档案信息
print("档案信息:", faker_zh.profile())
print("档案信息(简单):", faker_zh.simple_profile())

# 中国区域 地理信息
print("市/县:", faker_zh.city_suffix())
print("国家:", faker_zh.country())
print("国家编码:", faker_zh.country_code())
print("区:", faker_zh.district())
print("详细地址:", faker_zh.address())
print("地理坐标:", faker_zh.coordinate())
print("纬度:", faker_zh.latitude())
print("经度:", faker_zh.longitude())
print("邮编:", faker_zh.postcode())
print("街道地址:", faker_zh.street_address())
print("街道名:", faker_zh.street_name())
print("街/路:", faker_zh.street_suffix())