Faker:造数据不再手写,一个库全搞定!
你还在为测试数据发愁吗?一个个手写测试数据真的很烦,而且数据看起来也不太真实。今天给大家介绍一个神器 - Faker。这玩意儿专门用来生成各种假数据,从名字、地址到公司名称,啥都能造,关键是看起来贼真实!
装这个库超简单,一行命令搞定:
来看看咋用:
from faker import Faker
fake = Faker('zh_CN') # 创建一个中文faker对象
print(fake.name()) # 张强
print(fake.address()) # 广东省兴城市高港南京路f座 867号
print(fake.company()) # 网新科技有限公司
print(fake.email()) # xiulan11@hotmail.com
光整这些基础的还不够带劲,咱们来点花活:
# 生成一堆用户信息
users = []
for _ in range(3):
users.append({
'name':fake.name(),
'job':fake.job(),
'addr':fake.address(),
'phone':fake.phone_number(),
'birthday':fake.date_of_birth(minimum_age=18, maximum_age=80)
})
print(users)
温馨提示:创建 Faker 实例时别老是重复创建,整个程序用一个就够了,不然会慢得要死。
faker 能造的数据可多了:
# 互联网相关
print(fake.ip_address()) # 192.168.1.1
print(fake.user_name()) # xiaoming123
print(fake.domain_name()) # zhang.net
# 公司信息
print(fake.company_prefix()) # 创新
print(fake.company_suffix()) # 科技有限公司
# 地理信息
print(fake.city()) # 深圳市
print(fake.street_address()) # 永安街道田路Q座
有时候想要啥数据自己说了算:
from faker.providers import BaseProvider
class MyProvider(BaseProvider):
def my_game(self):
return self.random_element(['王者荣耀', '和平精英', '原神'])
fake.add_provider(MyProvider)
print(fake.my_game()) # 随机输出一个游戏名
温馨提示:自己写 provider 的时候记得继承 BaseProvider,不然啥功能都用不了。
测试的时候老想要一样的数据:
fake = Faker('zh_CN')
Faker.seed(12345)
print(fake.name()) # 每次运行都一样
print(fake.address())
小技巧:用了种子以后,同样的代码运行好多次结果都一样,debug 的时候特别好使。
整点中英文混合的:
fake_cn = Faker('zh_CN')
fake_en = Faker('en_US')
print(f“{fake_cn.name()} lives in {fake_en.city()}”)
玩 faker
最爽的就是不用操心数据的真实性,啥数据都能造,还贼像那么回事。要是手写这些数据,不得累死啊!代码测试、演示、压力测试,这都是好帮手。记得多翻翻官方文档,里面藏着不少好玩的功能等着你去发现呢。