Faker简要介绍及原理分析

Faker原意为骗子,此处表示一种能够构造仿造数据的模块。

1. 安装

pip install Faker --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple

2. 导入

from faker import Faker

3. 核心功能

3.1 生成姓名

from faker import Faker

faker = Faker()
en_name = faker.name()
print(en_name)

# locale可以配置本地化,默认为
faker = Faker(locale='zh_CN')
cn_name = faker.name()
print(cn_name)

其结果为:

Ashley Smith
徐秀云

看源代码能知道其locale值可以接收str,可迭代的类型如list/set/tuple, 以及特殊的排序字典OrderDict,其默认值为'en_US',此外其本地化的分隔符使用'-' / '_' 均可以

image.png
image.png

3.2 生成详细的地址

def faker_address():
    faker = Faker()
    en_address = faker.address()
    print(en_address)
    print()

    faker = Faker(locale='zh_CN')
    cn_address = faker.address()
    print(cn_address)

运行结果

522 Anthony Glens
West Donaldtown, VT 59398

澳门特别行政区潮州市花溪重庆路h座 406479
  • 此时,大家可以尝试一下通过pycharm点击address方法,会发现无法进入对应的方法。但为什么能获取的值呢。让我们一个Debug看一下
image.png
  • 上图可以发现其调用对应的属性时,实际是去调用了getattribute方法,

getattribute是属性访问拦截器,就是当这个类的属性被实例访问时,会自动调用类的getattribute方法

  • 继续调用会发现,其调用getattr方法,并通过attr参数返回对应的工厂中的随机值
image.png

Tips: 无论属性是否存在,都会先调用getattribute 方法;在调用getattribute 方法获取不到属性时,才会去调用getattr方法

  • 切回去看factories如何生成的,其调用Factory的类方法实现provider收集


    image.png

    image.png

既默认情况下回收集如下的provider


image.png

4. 除此之外,其还对pytest做了支持,方便在测试中更方便的引用

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容