Python中有一个神奇的库叫做faker,它可以自动帮助我们生成各种看似真实的“假”数据。让我们来看看。

安装

首先我们先来看看这个库怎么安装,其实装起来非常简单,使用 pip 安装就可以了:

这个库支持很多语言,包括中文。具体的支持的语言列表可以看:https://faker.readthedocs.io/en/master/locales.html。

这里几个比较常见的语言代号列一下:

  • 简体中文:zh_CN
  • 繁体中文:zh_TW
  • 美国英文:en_US
  • 英国英文:en_GB
  • 德文:de_DE
  • 日文:ja_JP
  • 韩文:ko_KR
  • 法文:fr_FR
from faker import Fakerfaker = Faker("zh_CN")
print(faker.name())
print(faker.address())
print(faker.job())
print(faker.company())

首先我们从 faker 这个包里面导入一个 Faker 类,然后将其实例化为 faker 对象,依次调用它的 name、address、text 方法,看下运行效果:

可以看到一段中文名字,地址,长文本生成。看的出来地址是省、地、县、街道的随机组合,而文字也是词的随机组合,但实际上这比我们开头列出的测试数据强得多了。

上面的代码每次运行得到的结果都是不同的,因为生成的结果都是随机组合而成的。

Provider

接下来让我们详细看下 faker 可以都生成什么类型的数据,具体的可用 API 可以看https://faker.readthedocs.io/en/master/locales/zh_CN.html,这里面列出来了可用的所有方法。

但打开之后可以发现,这里面多了一个 Provider 对象,那么这个 Provider 是怎么一回事呢?

实际上,faker库的设计目的是将provider对象分离为faker对象的“插件”。FAKER可以添加一个又一个Provider对象。provider对象为faker对象提供了生成特定数据的核心实现。Faker就相当于是一个生成器。它的生成功能依赖于什么?Provider为faker提供生成特定数据的能力。

实际上这个 faker 库在设计上,为了解耦,将 Provider 对象做成了 Faker 对象的”插件“。Faker 可以添加一个个 Provider 对象,Provider 对象为 Faker 对象提供了生成某项数据的核心实现。就相当于 Faker 对象是一个生成器,它的生成功能依赖于什么呢?依赖于 Provider,是 Provider 提供给了 Faker 对象生成某项数据的能力。

那我们一定很好奇。faker对象能够生成数据,那它肯定内置了一些默认的对象,我们打印看一下:

from faker import Fakerfaker = Faker("zh_CN")
print(faker.providers)

运行结果如下:

通过名字可以看到有 user_agent、phone_number、isbn、credit_card 等 Provider,其中有语言差异的 Provider 还区分了语言,比如 phone_number 代表电话号码,这个不同语言的不同,所以这里就又分了一层 zh_CN,作了语言的区分。

这样一来,通用的 Provider 就直接处在某个 Provider 类别的模块中,具有语言差异的 Provider 就又根据不同的语言进一步划分了模块,设计上非常科学,易扩展又不冗余。

知道了 Faker 具有这么多 Provider 之后,我们来看看刚才调用的 name、address 等方法又和 Provider 有什么关系呢?

我们将 name、address、text 等方法打印一下看看:

from faker import Faker

faker Faker('zh_CN')
print('name:', faker.name)
print('address:', faker.address)
print('text:', faker.text)

注意这里没有调用,而是直接打印了这三个方法,这样可以直接输出方法的对象形式的描述,结果如下:

name: <bound method Provider.name of <faker.providers.person.zh_CN.Provider object at 0x10f6dea58>>
address: <bound method Provider.address of <faker.providers.address.zh_CN.Provider object at 0x10e9e6cf8>>
text: <bound method Provider.text of <faker.providers.lorem.zh_CN.Provider object at 0x10f6dfda0>>

原来我们调用的方法就是 Faker 对象调用的 Provider 里面的对应方法,比如 name 就是 faker.providers.person.zh_CN.Provider 里面的 name 方法,可以看一看源码验证一下,源码在:https://github.com/joke2k/faker/blob/master/faker/providers/person/__init__.py,看完之后你会发现,里面定义了 name 方法,然后 Faker 动态地将这个方法引入进来了。

方法列举

有这么多Provider,我们再详细地看看还有哪些常用的方法吧,下面进行一部分简单的梳理,具体可以参考来源文档,地址为:https://faker.readthedocs.io/en/master/providers.html。

Address

用于生成地址相关数据,如地址、城市、邮政编码、街道等,用法如下:

faker.address()
# '新疆维吾尔自治区杰县南湖武汉街D座 253105'
faker.building_number()
# 'B座'
faker.city()
# '璐县'
faker.city_name()
# '贵阳'
faker.city_suffix()
# '县'
faker.country()
# '阿拉斯加'
faker.country_code(representation="alpha-2")
# 'CR'
faker.district()
# '西峰'
faker.postcode()
# '726749'
faker.province()
# '福建省'
faker.street_address()
# '余路N座'
faker.street_name()
# '李路'
faker.street_suffix()
# '路'

Person

用于生成与人名相关的数据,包括姓、名、全名、英文名等。它还可以区分男人和女人的名字。用法如下:

faker.first_name_male()
# '利'
faker.first_romanized_name()
# 'Jing'
faker.last_name()
# '温'
faker.last_name_female()
# '寇'
faker.last_romanized_name()
# 'Lei'
faker.name()
# '黄明'
faker.name_female()
# '张凯'
faker.name_male()
# '黄鹏'

Date Time

用于生成与时间相关的数据,如年、月、周、出生日期等,还可以返回datetime类型数据。用法如下:

faker.am_pm()
# 'AM'
faker.century()
# 'X'
faker.date(pattern="%Y-%m-%d", end_datetime=None)
# '1997-06-16'
faker.date_between(start_date="-30y", end_date="today")
# datetime.date(2000, 8, 30)
faker.date_between_dates(date_start=None, date_end=None)
# datetime.date(2019, 7, 30)
faker.date_object(end_datetime=None)
# datetime.date(1978, 3, 12)
faker.date_of_birth(tzinfo=None, minimum_age=0, maximum_age=115)
# datetime.date(2012, 6, 3)
faker.date_this_year(before_today=True, after_today=False)
# datetime.date(2019, 7, 22)
faker.date_time(tzinfo=None, end_datetime=None)
# datetime.datetime(2018, 8, 11, 22, 3, 34)
faker.date_time_ad(tzinfo=None, end_datetime=None, start_datetime=None)
# datetime.datetime(1566, 8, 26, 16, 25, 30)
faker.date_time_between(start_date="-30y", end_date="now", tzinfo=None)
# datetime.datetime(2015, 1, 31, 4, 14, 10)
faker.date_time_between_dates(datetime_start=None, datetime_end=None, tzinfo=None)
# datetime.datetime(2019, 7, 30, 17, 51, 44)
faker.date_time_this_century(before_now=True, after_now=False, tzinfo=None)
# datetime.datetime(2002, 9, 25, 23, 59, 49)
faker.day_of_month()
# '04'
faker.day_of_week()
# 'Monday'
faker.iso8601(tzinfo=None, end_datetime=None)
# '1987-07-01T18:33:56'
faker.past_date(start_date="-30d", tzinfo=None)
# datetime.date(2019, 7, 25)
faker.past_datetime(start_date="-30d", tzinfo=None)
# datetime.datetime(2019, 7, 18, 22, 46, 51)
faker.time(pattern="%H:%M:%S", end_datetime=None)
# '16:22:30'
faker.time_series(start_date="-30d", end_date="now", precision=None, distrib=None, tzinfo=None)
# <generator object Provider.time_series at 0x7fcbce0604f8>
faker.timezone()
# 'Indian/Comoro'
faker.unix_time(end_datetime=None, start_datetime=None)
# 1182857626
faker.year()
# '1970'

File

用于生成与文件和文件路径相关的数据,包括文件扩展名、文件路径、mime_类型、磁盘分区等。用法如下:

faker.file_extension(category=None)
# 'flac'
faker.file_name(category=None, extension=None)
# '然后.numbers'
faker.file_path(depth=1, category=None, extension=None)
# '/关系/科技.mov'
faker.mime_type(category=None)
# 'video/ogg'
faker.unix_device(prefix=None)
# '/dev/sdd'
faker.unix_partition(prefix=None)
# '/dev/xvds3'

Job

用于生成职业相关的数据,用法如下:

faker.job()
# '烫工'

Company

用于生成公司相关数据,如公司名、公司前缀、公司后缀等,用法如下:

faker.bs()
# 'grow rich initiatives'
faker.catch_phrase()
# 'Self-enabling encompassing function'
faker.company()
# '恒聪百汇网络有限公司'
faker.company_prefix()
# '晖来计算机'
faker.company_suffix()
# '信息有限公司'

Color

用于生成和颜色相关的数据,如 HEX、RGB、RGBA 等格式的颜色,用法如下:

faker.color_name()
# 'DarkKhaki'
faker.hex_color()
# '#97d14e'
faker.rgb_color()
# '107,179,51'
faker.rgb_css_color()
# 'rgb(20,46,70)'
faker.safe_color_name()
# 'navy'
faker.safe_hex_color()
# '#dd2200'

User-Agent

用于生成和浏览器 User-Agent 相关的内容,可以定制各种浏览器,还可以传入版本信息来控制生成的内容,用法如下:

faker.chrome(version_from=13, version_to=63, build_from=800, build_to=899)
faker.firefox()
faker.internet_explorer()
faker.linux_platform_token()
faker.linux_processor()
faker.mac_platform_token()
faker.mac_processor()
faker.opera()
faker.safari()
faker.user_agent()
faker.windows_platform_token()
# 'Windows NT 6.1'

以上仅仅列了一部分,还有更多的功能大家可以查看官方文档的内容,链接为:https://faker.readthedocs.io/en/master/locales/zh_CN.html。

Geo

用于生成地理位置相关数据,包括纬度、经度、时区等。用法如下:

faker.coordinate(center=None, radius=0.001)
# Decimal('-114.420686')
faker.latitude()
# Decimal('-9.772541')
faker.latlng()
# (Decimal('-27.0730915'), Decimal('-5.919460'))
faker.local_latlng(country_code="US", coords_only=False)
# ('41.47892', '-87.45476', 'Schererville', 'US', 'America/Chicago')
faker.location_on_land(coords_only=False)
# ('12.74482', '4.52514', 'Argungu', 'NG', 'Africa/Lagos')
faker.longitude()
# Decimal('40.885895')

Credit Card

用于生成信用卡相关数据,如过期时间、银行卡号、安全码等,用法如下:

faker.credit_card_expire(start="now", end="+10y", date_format="%m/%y")
# '08/20'
faker.credit_card_full(card_type=None)
# 'Mastercard\n玉兰 范\n5183689713096897 01/25\nCVV: 012\n'
faker.credit_card_number(card_type=None)
# '4009911097184929918'
faker.credit_card_provider(card_type=None)
# 'JCB 15 digit'
faker.credit_card_security_code(card_type=None)
# '259'

Internet

用于生成与Internet相关的数据,包括随机电子邮件、域名、IP地址、URL、用户名、后缀名等。用法如下:

faker.ascii_company_email(*args, **kwargs)
# 'xuna@xiaqian.cn'
faker.ascii_email(*args, **kwargs)
# 'min59@60.cn'
faker.ascii_free_email(*args, **kwargs)
# 'min75@gmail.com'
faker.domain_name(levels=1)
# 'xiulan.cn'
faker.free_email(*args, **kwargs)
# 'yanshen@gmail.com'
faker.free_email_domain(*args, **kwargs)
# 'yahoo.com'
faker.hostname(*args, **kwargs)
# 'lt-18.pan.cn'
faker.image_url(width=None, height=None)
# 'https://placekitten.com/51/201'
faker.ipv4(network=False, address_class=None, private=None)
# '192.233.68.5'
faker.ipv4_network_class()
# 'a'
faker.ipv4_private(network=False, address_class=None)
# '10.9.97.93'
faker.ipv4_public(network=False, address_class=None)
# '192.51.22.7'
faker.ipv6(network=False)
# 'de57:9c6f:a38c:9864:10ec:6442:775d:5f02'
faker.mac_address()
# '99:80:5c:ab:8c:a9'
faker.url(schemes=None)
# 'http://mingli.cn/'
faker.user_name(*args, **kwargs)
# 'jie54'

Misc

用于生成模糊数据,如密码、sha1、sha256、md5 等加密后的内容,用法如下:

faker.boolean(chance_of_getting_true=50)
# True
faker.md5(raw_output=False)
# '3166fa26ffd3f2a33e020dfe11191ac6'
faker.null_boolean()
# False
faker.password(length=10, special_chars=True, digits=True, upper_case=True, lower_case=True)
# 'W7Ln8La@%O'
faker.sha1(raw_output=False)
# 'c8301a2a79445439ee5287f38053e4b3a05eac79'
faker.sha256(raw_output=False)
# '1e909d331e20cf241aaa2da894deae5a3a75e5cdc35c053422d9b8e7ccfa0402'
faker.uuid4(cast_to=<class 'str'>)
# '6e6fe387-6877-48d9-94ea-4263c4c71aa5'

Lorem

用于生成一些伪文本数据,包括句子、自然段、长文本、关键词等。此外,可以通过不同的参数传递来控制生成的长度。用法如下:

faker.paragraph(nb_sentences=3, variable_nb_sentences=True, ext_word_list=None)
# '包括的是报告那些一点.图片地址基本全部.'
faker.paragraphs(nb=3, ext_word_list=None)
faker.sentence(nb_words=6, variable_nb_words=True, ext_word_list=None)
# '介绍结果自己解决处理.'
faker.sentences(nb=3, ext_word_list=None)
# ['查看其实一次学习登录浏览是一他们.', '而且资源的人事情.', '科技价格免费大学教育.']
faker.text(max_nb_chars=200, ext_word_list=None)
faker.texts(nb_texts=3, max_nb_chars=200, ext_word_list=None)
faker.word(ext_word_list=None)
# '注意'
faker.words(nb=3, ext_word_list=None, unique=False)
# ['责任', '组织', '以后']

在这里每个方法的参数是不同的,具体参数解释可以看源代码方法的注释:https://github.com/joke2k/faker/blob/master/faker/providers/lorem/__init__.py。

python完美测试数据之faker!相关推荐

  1. python完美测试数据之faker

    Python库--Faker 在编写程序过程中,我们常常需要用到很多数据来进行测试.如果要是手动制造数据的话,肯定要花费大把精力,这不合理.此时我们应该使用Faker这个Python库,用它来生成各种 ...

  2. python完美突破tls/ja3(大树乘凉版)

    前言 昨天geekbyte大佬发布了篇文章 ,文章名是 python完美突破tls/ja3.过程是先编译curl-impersonate,编译成功后再继续编译 spike 大佬魔改过的pycurl,最 ...

  3. python完美突破tls/ja3

    声明 以下只是搬运下我公众号的东西.很早就发过了.原帖地址: python完美突破tls/ja3 (qq.com) 已经发公众号的为什么还发csdn 有的圈内朋友,不经过我的允许,删减摘录我公众号的内 ...

  4. Python 完美实现自动翻译translaors

    Python 完美实现自动翻译translaors 1.下载translators库 2.解压进入目录安装 python setup.py install 3.编写py程序 import transl ...

  5. 接口测试 - 构造伪数据/测试数据(Faker)

    前言 作为一名软件测试工程师,在日常测试工作中经常需要测试数据.功能测试时,笔者通常是去系统中查找存量数据或者手动去造数据.一般情况在自动化测试中,可以使用写死的测试数据或者自己写代码自动生成测试数据 ...

  6. python造数神器-Faker库

    在测试过程中,大家肯定会遇到一个很有意思的问题 -- 如何优雅的快速的造数?大部分人起名字都是张三.李四.王五.赵六之类的,或者会用一些自己喜欢的人物,作品,但是遇到需要批量生成测试数据时,起名字等造 ...

  7. python生成测试数据_Python基于Hypothesis测试库生成测试数据

    Hypothesis是Python的一个高级测试库.它允许编写测试用例时参数化,然后生成使测试失败的简单易懂的测试数据.可以用更少的工作在代码中发现更多的bug. 安装 pip install hyp ...

  8. [编程基础] Python数据生成库Faker总结

    Python Faker教程展示了如何使用Faker软件包在Python中生成伪数据.我们使用joke2k/faker包. 文章目录 1 介绍 1.1 简单的使用 1.2 Faking names 1 ...

  9. python产生模拟数据——faker库的使用

    简介 使用faker可以获取很多模拟数据,如:姓名.电话.地址.银行.汽车.条形码.公司.信用卡.email.user_agen等等 学会使用这个库,再也不用为制造假数据发愁了...... 同时,使用 ...

最新文章

  1. 单臂路由与三层交换机实现VLAN通信
  2. Eclipse对Java(TM)8的官方支持
  3. MYSQL性能调优及架构设计学习笔记-影响MYSQL性能的相关因素之实例分析
  4. python自动发送邮件不需要发件邮箱_python使用QQ邮箱实现自动发送邮件
  5. 去中心化稳定币系统Venus Protocol即将推出v2
  6. 梯度下降优化算法综述(转载)
  7. cmd 220 ftp 远程主机关闭连接_网络基础知识:FTP工作流程
  8. docker_6 Docker 网络
  9. Windows Server 2012 R2 官方原版镜像(转载)
  10. 源码编译安装Netron模型可视化工具
  11. mysql 如何 导入txt文件_mysql中导入txt文件
  12. C语言题目:5-6 购物(一) (25 分)
  13. 笔记 GWAS 操作流程2-5:杂合率检验
  14. [转载] 中华典故故事(孙刚)——35 一文钱难倒英雄汉
  15. HashTab 2.08 简体中文版
  16. gitlab rpm包安装方法
  17. 深入浅出的分析 TreeMap
  18. 影响神经网络训练速度的因素
  19. redhat开启telnet后无法连接
  20. HJ20 密码验证合格程序 Java

热门文章

  1. QQ邮箱疯狂的附件:别人笑我太疯癫 我笑别人看不穿
  2. 短视频平台开发,将图片、视频保存到本地的相册中
  3. sqlzoo刷题笔记-02 | SUM and COUNT
  4. 3 随机数与蒙特卡洛方法及Python实现
  5. Mac 苹果系统没有WIFI选项自检出现-1005D
  6. js写的 几款时间轴
  7. Mac使用数据线连接安卓手机传输文件
  8. 【java】java intellij idea 破解
  9. activiti5.21 + SVG 绘制流程图 高亮显示已完成节点
  10. 该如何在中国手机市场生存