码迷,mamicode.com
首页 > 其他好文 > 详细

利用Faker生成常用的测试数据

时间:2021-06-07 20:58:38      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:脚本   数值范围   今天   数据   电话   style   doc   blank   用法   

最近发现一个能够任意生成各种数据的python库:faker,可以借助它来生成各种数据,例如姓名、地名、日期、电话号码等(各种有意义、无意义的假数据)

git地址:https://github.com/joke2k/faker

文档:https://faker.readthedocs.io/en/stable/

本文将简单介绍一下我在实际工作中的一些应用

1、生成手机号码

import faker

fake = faker.Faker(locale=zh_CN)  # 初始化,指定生成中文格式数据
phone = fake.phone_number()  # 生成一条电话号码

每次执行时都会生成一个新的电话号码

如果想一次生成多条, 可以借助for循环

import faker

fake = faker.Faker(locale=zh_CN)
phones = [fake.phone_number() for _ in range(5)]  # 列表推导,把生成的数据组成一个列表
print(phones)

结果:
[14589888619, 13107540315, 15341290420, 13915229439, 13591304092]
import faker

fake = faker.Faker(locale=zh_CN)

for _ in range(5):  # 借助for循环
    phone = fake.phone_number()
    print(phone)

结果:
15219917682
14511308981
18819869885
18220361555
18591857341

2、生成人名

通过 fake.name() 随机生成一个人名

效果如下

>>> from faker import Faker
>>> fake = Faker()
>>> fake = Faker(locale=zh_CN)
>>> fake.name()
陈飞
>>> fake.name()
陈杨

嗯...还挺像回事的

如果在平时测试过程中比如遇到补全个人信息之类的功能,可以用这个来随机生成一个名字,省的自己去想了

并且在写一些造数脚本时,也可以给那种名称参数传入这种随机值,省时省力,还不重样

3、生成身份证号

测试过程中,有些测试数据可能会涉及到输入身份证号,利用 fake.ssn() 即可生成一个随机的身份证ID

import faker

fake = faker.Faker(locale=zh_CN)

identity_id = fake.ssn()
print(identity_id)

结果:
511623199003268061

identity_ids = [fake.ssn() for i in range(5)]  # 生成多个
print(identity_ids)

结果:
[140108198905080513, 532325199712279418, 370601193711292094, 610526199905267515, 652101194803155106]

4、生成数字

 faker也提供了一些方法来生成随机数

1、fake.numerify(),生成3位随机数字
>>> fake.numerify()
531

2、random_digit(),生成0~9之间的随机数
>>> fake.random_digit()
6
3、random_digit_not_null(),生成1~9之间的随机数 >>> fake.random_digit_not_null() 5
4、random_int(),默认0~9999,可以通过设置min, max来设置数值范围 >>> fake.random_int() 8388 >>> fake.random_int(100, 200) 113

5、生成日期

同样faker也可以生成随机日期、时间等,下面列举几个常用的

(1)fake.date(),生成一个随机日期字符串

import faker

fake = faker.Faker(locale=zh_CN)

random_date1 = fake.date(pattern=%Y-%m-%d, end_datetime=None)  # 生成一个随机日期(格式为日期字符串),end_datetime参数限制最大日期
print(random_date1)
print(type(random_date1))

结果:
2004-10-19
<class str>

可以看到,生成是日期字符串

end_datetime 参数可以限制日期的最大范围,它可以接收date对象,如下
import faker

fake = faker.Faker(locale=zh_CN)

from datetime import date

random_date2 = fake.date(pattern=%Y-%m-%d, end_datetime=date(1980, 12, 20))  # end_datetime设置为1980年12月20日
print(random_date2)

结果:
1974-04-03

(2)fake.date_between()生成一个指定范围的日期

通过查看源码可以发现,默认生成的是30年前至今天的一个随机日期

源码如下:

技术图片

 date_start和date_end传入不同参数值对应的结果 

1、
random_date1 = fake.date_between(start_date=date(1970, 12, 20), end_date=date(1970, 12, 25))  # 取1970年12月20至1970年12月25之间的1天
print(random_date1)
结果:
1970-12-20

2、
random_date2 = fake.date_between(start_date=-30y, end_date=today)
# -1y, 表示相对于end_date,往前推1年
# -1M, 表示相对于end_date,往前推1个月
# -5d, 表示相对于end_date,往前推5天
# today, 表示今天

结果:
2017-11-27
print(type(random_date2))
结果:
<class ‘datetime.date‘>
random_date3 = fake.date_between(start_date=today, end_date=+5d)
# +5d, 表示相对于start_date,往后推5d

(3) fake.date_this_month(),生成本月中的一天

它有2个参数,before_today和after_today,默认情况下 before_today=True, after_today=False

意思是获取当月今天之前的日期

可以通过修改两个参数的布尔值,获取本月今天之前或者今天之后的日期

random_date = fake.date_this_month()
print(random_date)
print(type(random_date))

结果:
2021-06-03
<class datetime.date>

fake.date_this_month(before_today=True, after_today=False)

简单试了一下,发现

before_today=True, after_today=False时,可以得到今天之前的日期(不包含今天)
before_today=True, after_today=True时,可以得到本月的任意一天(包含今天)
before_today=False, after_today=True时,可以得到今天之后的日期(包含今天)
before_today=False, after_today=False时,获取今天的日期  

(4)fake.date_this_year()获取今年的某一天

用法参考fake.date_this_month(),也是包含 before_today和after_today2个参数

 

如果生成一批数据中有重复的该怎么办?

可以借助set()去重

phones = [fake.phone_number() for _ in range(5)]
phones_new = list(set(phones))  # 先使用set去重,再通过list方法转为列表(是否再转换为列表,看个人需要)

 还有很多用法,可以参考:
https://www.jianshu.com/p/6bd6869631d9

https://zhuanlan.zhihu.com/p/87203290

或者查看源码,一般各种方法的源码路径在"faker/providers"下

技术图片

 

利用Faker生成常用的测试数据

标签:脚本   数值范围   今天   数据   电话   style   doc   blank   用法   

原文地址:https://www.cnblogs.com/hanmk/p/14850416.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!