Facker,一个更优雅地造测试数据的 Python 库

文摘   2024-11-15 19:58   山东  
大家好,今天 668 给大家分享一个帮我们更优雅地伪造测试数据的 Python 库 – Facker。
无论是需要导入数据库,创建美观的 XML 文档,填充数据进行压力测试,Faker 都是您的理想之选~

我们开发系统时,经常需要造一些假数据用于测试。

举个例子,设计一个学生管理系统,测试注册功能,总需要一些用户信息吧。我猜大部分人都会填:用户 aaaa ,密码 1111 ,手机号码 1111 ……数据很假没什么实际参考意义,而且数据量少还好,数据量一多这苦力活就不得了。

自己造数据很累,那有没有不需要大脑又可以造出比较真实的数据的方法? 还真有,这就是本文要介绍的一个 Python 模块—— Faker 。

安装

注意仅支持 Python 3.5+。

pip install Faker

快速上手

1. 自动化生成器

生成数据前需要先初始化一个生成器,有两种方式可以完成:

  1.  faker.Factory.create() 

  2.  faker.Faker() 

>>> from faker import Factory>>> fake = Factory.create()
>>> # OR>>> from faker import Faker>>> fake = Faker()
>>> fake.name()'Lucy Cechtelar'
>>> fake.address()'426 Jordy Lodge Cartwrightshire, SC 88120-6700'
>>> fake.text()'Sint velit eveniet. Rerum atque repellat voluptatem quia rerum. Numquam excepturi beatae sint laudantium consequatur. Magni occaecati itaque sint et sit tempore. Nesciunt amet quidem. Iusto deleniti cum autem ad quia aperiam. A consectetur quos aliquam. In iste aliquid et aut similique suscipit. Consequatur qui quaerat iste minus hic expedita. Consequuntur error magni et laboriosam. Aut aspernatur voluptatem sit aliquam. Dolores voluptatum est. Aut molestias et maxime. Fugit autem facilis quos vero. Eius quibusdam possimus est. Ea quaerat et quisquam. Deleniti sunt quam. Adipisci consequatur id in occaecati. Et sint et. Ut ducimus quod nemo ab voluptatum.'

可以写一个循环批量生成:

>>> for _ in range(0, 10):...     print(fake.name())...Adaline ReichelDr. Santa Prosacco DVMNoemy Vandervort VLexi O'ConnerGracie WeberRoscoe JohnsEmmett LebsackKeegan ThielWellington Koelpin IIMs. Karley Kiehn V

看看自动化的威力!批量生成,每次都是随机的哦!

2. 本地化生成器

你可能会说,这个玩意儿太洋气了——生成一堆英文名字地址啥的有毛用?确实,在计算机领域,英文有天生优势。

好在 Faker 还支持本地化,真是天地良心!一起来看看怎么生成中文信息吧:

>>> from faker import Factory>>> fake = Factory.create('zh_CN')
>>> for _ in range(0, 10):... print(fake.name())...於涛万静孙秀荣丘辉方玉虞建国丘丽丽郭杨江欣狐龙
>>> for _ in range(0, 10):... print(fake.address())...杰市戚路d座 855521丽华市魏街e座 800775坤市莘路P座 376919秀云市温街s座 518607晨市季街Z座 931186丽市夹路N座 670627坤市漆街k座 968075瑞市於街z座 168689金凤市雍路E座 148292晨市黎路R座 916369

高级用法

1.功能扩展

Faker 已经提供了足够丰富的信息生成,包括 名字 、 手机号 、 邮箱地址 、 邮编 等。尽管如此,可能还是没有办法满足你的需求。这时,你可以自己动手,丰衣足食。下面,我们通过一个例子看看怎么扩展 Faker 的功能吧:

from faker import Fakerfake = Faker()
# first, import a similar Provider or use the default onefrom faker.providers import BaseProvider# create new provider classclass MyProvider(BaseProvider): def foo(self): return 'bar'
# then add new provider to faker instancefake.add_provider(MyProvider)
fake.foo()

程序运行后,输出 bar 。

2.功能扩展

Faker 随机生成由 random.Random 驱动。其中, .random 属性返回 random.Random 对象。通过对该对象的操作,可以实现自定义的行为。

from faker import Fakerfake = Faker()fake.randomfake.random.getstate()

那么,可以实现什么自定义呢?举个例子,我们可以设置 seed 。seed 在随机数生成逻辑中什么作用,估计大家都清楚。比如,通过给定 seed 可以控制每次生成的内容都是一样的:

>>> from faker import Faker>>> fake = Faker()>>> faker.random.seed(4321)>>> print(fake.name())Margaret Boehm

还有等价写法哦:

>>> from faker import Faker>>> fake = Faker()>>> fake.seed(4321)>>> print(fake.name())Margaret Boehm

注意到,不同的两次运行,只要 seed 一样,生成出来的信息就是一样的。

3.命令行生成

有时想在 shell 或者其他程序中生成一些伪数据,是不是一定要写一个 Python 脚本呢?当然不是—— Faker 提供了一个命令行工具,应该可以应对大部分场景了:

$ faker address968 Bahringer Garden Apt. 722Kristinaland, NJ 09890
$ faker -l de_DE addressSamira-Niemeier-Allee 5694812 Biedenkopf
$ faker profile ssn,birthdate{'ssn': u'628-10-1085', 'birthdate': '2008-03-29'}
$ faker -r=3 -s=";" nameWillam Kertzmann;Josiah Maggio;Gayla Schmitt;

最后,可以通过 -h 选项查看使用帮助:

$ faker -husage: faker [-h] [--version] [-o output] [-l LOCALE] [-r REPEAT] [-s SEP]             [-i [INCLUDE [INCLUDE ...]]]             [fake] [fake argument [fake argument ...]]

668号厅苏女士
668小苏专业吐槽副业试片 天天追新剧,偶尔补老番 感谢关注,喜欢就留下吧~
 最新文章