Faker库-生成假数据/测试数据

Faker-生成假数据/测试数据

1. 安装Faker

pip install Faker

  ‍

2. 基本用法

  Faker用于快速生成随机的假数据,并按照一定的规则或种子生成,确保生成的假数据符合要求并可以复现生成的数据。

  这对用于测试、编写教程和压力检测都非常便捷。

  基本步骤非常简单:

  1. fakerFaker

  2. 创建一个 Fakerfake

  3. 使用这个实例的各种方法来生成不同类型的数据

from faker import Faker  # 导入Faker类

fake = Faker()  # 创建Faker实例

# 生成一些基本的假数据
print(f"姓名: {fake.name()}")
print(f"地址: {fake.address()}")
print(f"电子邮箱: {fake.email()}")
print(f"手机号: {fake.phone_number()}")
print(f"公司: {fake.company()}")
print(f"职位: {fake.job()}")

  ‍

3. 常用的假数据类型

  ‍

大类型 函数名 含义描述
个人信息 fake.name() 生成完整的个人姓名(含姓和名)
个人信息 fake.first_name() 生成个人的 “名”(不含姓)
个人信息 fake.last_name() 生成个人的 “姓”(不含名)
个人信息 fake.ssn() 生成符合中国格式的身份证号码(18 位)
个人信息 fake.profile() 生成完整的个人资料(含姓名、性别、生日、地址、邮箱等多维度信息)
联系信息 fake.address() 生成完整的物理地址(含省、市、区 / 县、街道、门牌号、邮编等)
联系信息 fake.city() 生成随机城市名称(不含省 / 自治区 / 直辖市前缀)
联系信息 fake.country() 生成随机国家名称
联系信息 fake.postcode() 生成符合中国格式的邮政编码(6 位数字)
联系信息 fake.phone_number() 生成符合中国格式的手机号(11 位数字,含运营商号段特征)
联系信息 fake.email() 生成符合格式的邮箱地址(含用户名、域名后缀)
金融商业 fake.credit_card_full() 生成完整信用卡信息(含卡号、有效期、CVV 码、卡组织)
金融商业 fake.credit_card_number() 生成纯信用卡卡号(不含有效期、CVV 等附加信息)
金融商业 fake.currency() 生成随机货币种类及对应金额(含货币符号 / 名称、数值)
金融商业 fake.company() 生成随机公司名称(含地域、行业、组织形式等元素)
金融商业 fake.bs() 生成模拟企业业务描述的 “BS 语句”(常用于测试文案,如 “部署跨平台服务”)
网络与科技 fake.ipv4() 生成符合 IPv4 协议的 IP 地址(32 位,点分十进制格式)
网络与科技 fake.ipv6() 生成符合 IPv6 协议的 IP 地址(128 位,冒分十六进制格式)
网络与科技 fake.mac_address() 生成符合格式的 MAC 地址(网络设备物理地址,冒分十六进制格式)
网络与科技 fake.domain_name() 生成符合格式的域名(含二级域名、顶级域名)
网络与科技 fake.url() 生成完整 URL(含协议、域名、路径、参数等,模拟网页 / 资源地址)
网络与科技 fake.user_agent() 生成模拟浏览器 / 设备的 User-Agent 字符串(用于识别客户端信息)
文本与内容 fake.word() 生成单个随机单词(中文 / 英文,根据 Faker 语言设置)
文本与内容 fake.sentence() 生成完整的随机句子(含主谓宾结构,语义通顺)
文本与内容 fake.paragraph() 生成段落级文本(由多个连贯句子组成,模拟短文)
文本与内容 fake.text() 生成长文本(由多个段落组成,模拟文章 / 文档内容)
文本与内容 fake.prefix() 生成姓名前缀(用于称呼,如先生、博士等)
文本与内容 fake.suffix() 生成姓名后缀(用于标识身份 / 辈分,如 Jr.、博士等)
日期时间 fake.date_of_birth() 生成合理的出生日期(通常在 18-80 岁区间,符合现实年龄逻辑)
日期时间 fake.date_time() 生成具体的日期时间(含年、月、日、时、分、秒,可指定时区)
日期时间 fake.future_date() 生成未来的日期(相对于当前时间,可指定间隔天数范围)
其他 fake.color_name() 生成常见的颜色名称(中文 / 英文,如红色、蓝色)
其他 fake.hex_color() 生成十六进制颜色码(RGB 格式,含 #前缀,如 #FF0000 代表红色)
其他 fake.file_name() 生成随机文件名(含文件名前缀、后缀,模拟文档 / 图片 / 视频等文件)
其他 fake.file_extension() 生成常见文件扩展名(不含 “.”,如 txt、pdf)

  ‍

4. 特定的语言和地区

  Faker 支持多种语言和地区(本地化)的数据生成。默认是英语(美国)数据,但可以在创建 Faker 实例时指定所需的语言环境(locale)。

from faker import Faker

# 生成中文(中国大陆)数据
fake_zh = Faker('zh_CN')
print(fake_zh.name())  # 例如: 孙玉珍:cite[7]
print(fake_zh.address()) # 例如: 西藏自治区齐齐哈尔县合川闻街W座 928940:cite[7]
print(fake_zh.phone_number()) # 例如: 13130781068:cite[7]

# 生成日语数据
fake_ja = Faker('ja_JP')
print(fake_ja.name())

# 甚至可以同时指定多个语言环境,Faker会混合使用
fake_multi = Faker(['zh_CN', 'en_US'])
for _ in range(5):
    print(fake_multi.name())

  ‍

限定假数据的规则

  很多时候我们希望假数据符合一定的规则,例如,12位的订单数据、以M开头的编码,或者生成一个范围内的数据,Faker 提供了多种方式来实现这一点:

使用参数控制输出

  许多生成器方法接受参数来定制输出:

from faker import Faker

fake = Faker()

# 生成特定长度的文本
short_text = fake.text(max_nb_chars=50)  # 最多50个字符的文本

# 生成指定范围的数字
random_number = fake.random_int(min=0, max=100)  # 0到100之间的随机整数
random_float = fake.random_number(digits=5, fix_len=True)  # 5位数字的随机数

# 生成特定格式的日期
future_date = fake.future_date(end_date='+30d')  # 未来30天内的日期

使用 unique

  在批量生成数据时,你可能需要确保某些值(如用户名、邮箱)是唯一的:

from faker import Faker

fake = Faker()

# 生成500个唯一的名字
names = [fake.unique.first_name() for i in range(500)]
print(len(set(names)))  # 确保set的长度也是500,即所有姓氏都是唯一的
'''
上述代码如果换成中文语库就会引发错误,可以猜猜原因
'''

  ‍

使用Faker

  可以使用 Faker 的 random_element() 或 random_choices() 方法从预定义列表中进行随机选择,并通过设置种子确保选择结果的一致性。以下是具体实现方法:

  random_element:选择单个元素

from faker import Faker

# 创建 Faker 实例
fake = Faker('zh_CN')

# 预定义列表
departments = ["研发部", "销售部", "市场部", "人力资源部", "财务部"]

# 设置种子确保可重复性
Faker.seed(42)

# 使用 random_element() 从列表中选择一个元素
selected_department = fake.random_element(elements=departments)
print(f"选择的部门: {selected_department}")  # 每次运行都会选择相同的部门

  random_choices:选择元素的组合

from faker import Faker

fake = Faker('zh_CN')
departments = ["研发部", "销售部", "市场部", "人力资源部", "财务部"]

# 设置种子
Faker.seed(123)

# 从列表中选择多个元素
selected_departments = fake.random_choices(elements=departments, length=3)
print(f"选择的部门: {selected_departments}")  # 每次运行都会选择相同的部门组合

  ‍

控制随机性:使用种子(Seed)

  在测试和调试时,能够重现相同的”随机”数据非常重要。Faker 允许你设置随机数生成器的种子(Seed),以确保每次运行都能生成完全相同的数据序列。

  全局种子

  通过 seed()

from faker import Faker

# 设置种子
Faker.seed(42)  # 可以是任意整数
fake = Faker()

# 每次运行都会生成相同的"随机"数据
print(fake.name())  # 总是得到相同的名字
print(fake.address())  # 总是得到相同的地址

  ‍

  为特定实例设置种子

from faker import Faker

fake1 = Faker()
fake1.seed(123)  # 为这个特定实例设置种子

fake2 = Faker()
fake2.seed(456)  # 为另一个实例设置不同的种子

# fake1 总会生成相同的数据序列
# fake2 会生成另一个相同的数据序列(但与fake1不同)

  ‍

使用自定义Provider

  如果 Faker 默认提供的数据不能满足你的特殊需求,你可以创建自定义的 Provider(提供者)来生成特定领域或格式的数据。

from faker import Faker
from faker.providers import BaseProvider

# 创建一个自定义Provider类
class MyCustomProvider(BaseProvider):
    def custom_product_id(self):
        """生成自定义产品ID"""
        prefix = self.random_letter().upper()
        number = self.random_number(digits=6)
        return f"{prefix}-{number}"
    
    def custom_status(self):
        """生成自定义状态"""
        statuses = ["pending", "processing", "completed", "cancelled"]
        return self.random_element(statuses)

# 创建Faker实例并添加自定义Provider
fake = Faker()
fake.add_provider(MyCustomProvider)

# 使用自定义Provider的方法
print(fake.custom_product_id())  # 例如: X-123456
print(fake.custom_status())      # 例如: processing

  ‍

使用社区提供的 Provider

  除了自己创建,你还可以寻找和使用社区已经开发好的特定领域 Provider,例如:

  • faker-vehicle

  • faker-geo

  • faker-commerce

  这些通常可以通过 pip 安装,然后像内置 Provider 一样使用。

  ‍

文末声明:

您必须遵守关于,您可以随意转发/引用,但要注明原作者Leon或设置本文跳转连接,并且您必须在文中包含或提醒浏览者遵守作者声明
欢迎关注公众号获取第二手文章!高效工作法

暂无评论

发送评论 编辑评论


				
上一篇
下一篇