Python Faker 入门大纲总结,建立对Faker的第一印象

Python Faker 入门大纲总结,建立对Faker的第一印象
大家好,我是练习时长两年半的大数据练习生,喜欢数学,AI,大数据。
写博客是为了总结,分享,自娱自乐。希望写出的东西会对自己,对别人都有价值!
废话不多说,现在是个终身学习的时代,开始学习了!奥力给!干了兄弟们!
是时候展现真正的技术了:👇👇👇😋😋😋

本文是一篇学习笔记,原文地址:

这个Faker的官方文档是总结性的内容,把这些代码跑一遍可以建立对Faker的基础印象,但是对细节不会深入。
具体的细节内容我会继续学习整理= =

文章目录

Faker 简介

Faker可以生成假数据

Faker 安装

pip install Faker

老版本的Faker叫做 fake-factory,但是现在叫Faker

Faker 测试

经典案例:

from faker import Faker

# 初始化假数据生成器Faker
fake = Faker()

# Faker生成name假数据
print("random fake name:"+fake.name())

# Faker生成address假数据
print("random fake address:"+fake.address())

# Faker生成test假数据
print("random fake text:"+fake.text())

第一次运行结果:

random fake name:Tammy Morales
random fake address:644 Gomez Crescent Suite 189
Alexanderchester, OH 42384
random fake text:Shoulder offer he west statement ever. System because couple condition. Plan return very player site future trouble. College without consumer step phone center trial.

第二次运行结果:

random fake name:Wendy Turner
random fake address:4504 Hester Brook Apt. 547
North Josephburgh, OK 02202
random fake text:Base well these show right know lay indeed. Four long many toward business us maybe. End nothing account travel they beautiful.
Such threat type by so. Purpose develop mean pass.

可以看到,每次运行都会生成随机的假数据,虽然数据没有实际意义,但是有的时候可能有奇效。

Providers

Faker有很多假数据生成器,它们都在providers类里。

from faker import Faker
from faker.providers import internet

fake = Faker()
fake.add_provider(internet)

print(fake.ipv4_private())

运行结果:

172.22.59.232

Faker的有很多假数据生成器,点击下方链接查看详细的每一个假数据生成器:

  • Faker的常用providers(常用的假数据生成器)

创建一个自定义Provider

"""
创建一个provider
"""
from faker import Faker
fake = Faker()

# 首先,导入默认的Provider
from faker.providers import BaseProvider

# 然后,创建一个Provider类,继承默认Provider
class MyProvider(BaseProvider):
    def hello(self):
        return 'hello world,I am a Customer Provider!'

# 然后把你自己的Provider添加到fake实例中
fake.add_provider(MyProvider)

# 然后你就能调用了
print(fake.hello())

运行结果:

hello world,I am a Customer Provider!

自定义废话生成器(sentence)的参数

"""
废话生成器
"""
from faker import Faker
fake = Faker()

nonsenseWord = [
'老八秘制小憨包','雷霆嘎巴','奥力给',
'干了兄弟们','我们遇到什么困难!','Giao!!',
'奥力giao!','一giao我里giaogiao','老干妈',
'腐乳','臭豆腐','ZBC']

# sentence是生成一个句子,现在不加参数,就是默认生成英文句子
print(fake.sentence())

# sentence里指定单词列表,会用你单词列表中的单词组成句子
print(fake.sentence(ext_word_list=nonsenseWord))

运行结果:

Election together return game executive those let body.
我们遇到什么困难! 雷霆嘎巴 ZBC ZBC 老八秘制小憨包 腐乳.

改变生成的语言种类

Faker可以生成数据不同语种的假数据,如果不指定语种,默认生成en_US英文数据。

from faker import Faker
fake = Faker('en_US')
for _ in range(10):
    print(fake.name())

运行结果:

Timothy Burton
Joyce Nelson
Michele Daniel
Christina Barnes
Timothy Foster
Mrs. Danielle Klein MD
Benjamin Smith
Lydia Martinez
Olivia Rangel
Carmen Brown

faker.Faker 也支持多语种数据同时生成

"""
多语种数据生成
"""
from faker import Faker
fake = Faker(['it_IT', 'en_US', 'ja_JP'])
for _ in range(10):
    print(fake.name())

运行结果:

Angelica Condoleo
Renata Romiti
Sig. Luigi Caetani
Michelle Nielsen
Sig.ra Amanda Piazzi
山田 涼平
Gioffre Trombetta 
Dott. Agnolo Depero 
山岸 充
Monica Mogherini

每次运行都会随机选择你指定的一种语言来生成。

你可以在providers包下找到支持的所有语种,这些语种可能会随着版本更新不断增加:

目前支持的语种列表:

  • ar_EG - Arabic (Egypt)
  • ar_PS - Arabic (Palestine)
  • ar_SA - Arabic (Saudi Arabia)
  • bg_BG - Bulgarian
  • bs_BA - Bosnian
  • 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_IN - English (India)
  • en_NZ - English (New Zealand)
  • 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
  • ka_GE - Georgian (Georgia)
  • ko_KR - Korean
  • 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)
  • ro_RO - Romanian
  • ru_RU - Russian
  • sl_SI - Slovene
  • sv_SE - Swedish
  • tr_TR - Turkish
  • uk_UA - Ukrainian
  • zh_CN - Chinese (China)
  • zh_TW - Chinese (Taiwan)

开发常用的语言种类列表

  • zh_CN - Chinese (China)
  • en_US - English (United States)
  • ja_JP - Japanese

Faker的命令行使用

安装Faker之后就能用命令行运行faker了。

faker [-h] [--version] [-o output]
      [-l {bg_BG,cs_CZ,...,zh_CN,zh_TW}]
      [-r REPEAT] [-s SEP]
      [-i {package.containing.custom_provider otherpkg.containing.custom_provider}]
      [fake] [fake argument [fake argument ...]]

faker:是一个安装在你环境里的脚本,开发中可以用 python -m faker 代替。

  • -h, --help: 显示帮助信息。
  • --version: 显示版本信息。
  • -o FILENAME: 输出重定向到指定文件。
  • -l {bg_BG,cs_CZ,...,zh_CN,zh_TW}: 指定允许使用的语种。
  • -r REPEAT: 会生成特定数量的结果。
  • -s SEP: 在生成的结果之间插入指定的分隔符
  • -i {my.custom_provider other.custom_provider} 指定自定义假数据生成器 (这里填你的假数据生成器的包路径,进行一个导包操作).
  • fake: faker假数据生成器经常使用的实例对象名。
  • [fake argument ...]:传递给fake的可选参数(例如,配置文件fake采用可选的逗号分隔字段名列表作为第一个参数)

例如:

1,命令行生成address

faker address

运行结果:

2110 Samantha Squares
Walkermouth, DC 14418

2,命令行生成中文address

faker -l zh_CN address

运行结果:

陕西省武汉县沈河澳门路A座 319489

3,命令行生成ssn列,birthdate列的profile

faker profile ssn,birthdate

运行结果:

{'ssn': '069-03-6580', 'birthdate': datetime.date(1921, 1, 29)}

4,命令行生成3个name结果,每个结果后追加;分号

faker -r=3 -s=";" name

运行结果:

Renee Horne;
Christina Harris;
Michael Pearson;

Pytest Fixtures

Faker有它自己的pytest插件,可以提供一个你可以使用的faker fixture,你可以点击下方链接了解更多:

  • Faker Pytest Fixtures

Factory Boy整合Faker

FactoryBoy官网:

安装:

pip install factory_boy

Factory BoyFaker整合了,只要调用 factory_boy的方法 factory.Faker即可

"""
factory boy
"""

import factory
from myapp.models import Book

class BookFactory(factory.Factory):
    class Meta:
        model = Book

    title = factory.Faker('sentence', nb_words=4)
    author_name = factory.Faker('name')

上面代码缺少了Book类,而且在没有搞明白Factory_boy的运行机制的情况下是没法看懂的,如果你看不懂直接跳过即可(这里我也看不懂,所以没有补充出book类,等我啥时候会了再把这里补上)。

关于Factory_boy,请参考如下链接:

  • Factory_boy基础操作

访问随机实例

生成器generator上的.random属性返回一个 random.Random 实例来生成值。

"""
访问随机实例
"""
from faker import Faker
fake = Faker()
print(fake.random)
print(fake.random.getstate())

默认所有的generator共享一个相同的random.Random实例,它可以被faker.generator import random访问. 对于那些想要影响所有实例的Faker插件来说很有用。

生成器做种

玩过我的世界的人都知道,每个种子都代表一个固定的世界。
玩过java随机数的都知道,种子固定后,随机产生的结果每次都是相同的。
那这个生成器generator也一样,固定的种子会产生固定的输出。
当你使用Faker做单元测试的时候,你可能想要经常生成相同的数据集。
generator提供了一个seed()方法,当你固定了seed,你就能每次都获得相同的结果。

"""
用seed固定每次生成的结果
"""
from faker import Faker
fake = Faker()
Faker.seed(9527)

print(fake.name())

第一次运行结果:

Kimberly Bishop

第二次运行结果:

Kimberly Bishop

第N次肯定也是Kimberly Bishop。固定seed固定输出结果,你学会了吗= =

generator也可以使用它自己的random.Random实例对象,通过使用seed_instance() 方法,让它不使用共享的random.Random实例对象

"""
不使用共享random对象的generator
"""
from faker import Faker
fake = Faker()
fake.seed_instance(9527)

print(fake.name())

多次运行结果都是:

Kimberly Bishop

区别在于:

  • seed()使用共享random对象
  • seed_instance()使用自己的random对象

虽然表面上看不出来= =

如果使用pytest,你可以通过定义一个faker_seed fixture来为faker做种。

理解pytest需要如下前置知识= =:

  • pytest基础

0基础读懂这篇文章还需要很多知识点,博文中的知识点引申链接暂时没有添加,持续更新中…

代码我都放这里了,这里是我所有的python测试代码存放位置= =,Faker的测试代码在20200616包下面

😆小伙伴们!相信看到这里的你一定有所收获!
😂如果我哪里写错欢迎评论区来喷😂😂😂
😘如果觉得对你有帮助请给个赞哦亲!🤞🤞🤞🤞🤞🤞
🤞🤞🤞最后引用名言一句:我们无论遇到什么困难,都不要怕,微笑着面对它!消除恐惧的最好办法就是面对恐惧!加油!奥力给!