python生成一个20万数据_python自动生成测试数据

欢迎关注公众号 学习资料不会少

在做功能测试或者自动化测试过程中,准备的数据常常会因为数据库中已有存在的数据而出来运行异常的情况。

举个例子,再测试注册用户的使用,会准备一个正确的测试数据,比如下面

username

password

repsass

expect

user1

123456

123456

成功

如果系统中已经存在测试用户user1,那么再次注册就会发现user1不能成功注册。针对这种场景,普遍的做法是在自动化脚本执行之前把原来的用户user1 删掉。但是这种做法可能要涉及到数据库的相关操作,是比较麻烦也是比较危险的。

比较理想的一种操作是每次注册用户时都使用一个随机的用户名,并且保证每次随机的值都不一样,这样数据库中不会存在相同的用户名,就不会出现上述问题。

要想实现这样的操作,一种操作方式使用第三方库比如 python的 faker。

主要内容

● faker自动生成测试数据

faker 使用

faker是python的一个第三方库,能够帮你自动模拟一些假数据。

https://faker.readthedocs.io/en/master/

01

安装

Law

pip install Faker

02

基本使用

Law

from faker import Faker

f = Faker()

# 随机生成姓名

print(f.name()

)# 随机生成地址

print(f.address())

# 随机生成email

print(f.email())

# 随机生成password

print(f.password())

# 随机生成一段文本

print(f.text())

输出

Ryan Lee

0018 Victor Mills

Brewerberg, RI 59924

karen59@gmail.com

3Iqq20KuK%

Keep have well year thousand science. Close drop father list behind hand. Time he themselves break more.

每次生成的数据都是不一样的。可以写一个for循环来查看数据

for _ in range(10):

    print(f.name())

输出

Daniel Palmer

Amanda Park

Stephanie Willis

Daniel Kerr

Shannon Boone

John Smith

Geoffrey Gibson

Eric Newman

Nicolas Gordon

Laura Jones

03

设置地域语言

Law

默认faker出来的数据是英语,如果数据有地域限制,比如要使用的语言为中文,通过设置地域更改文本语言。

支持的语言列表如下:

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_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)

使用中文,则可以设置

from faker import Faker

# 设置中文

f = Faker("zh_CN")

print(f.name())

17bd3c3e-db52-eb11-8da9-e4434bdf6706.svg

Provider

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

正是因为 Faker 对象内置了一些 Provider 对象,Faker 对象才可以生成刚才所要求的姓名、地址和文本。

from faker import  Faker

faker = Faker('zh_CN')

# 查看内置Provider

print(faker.providers)

输出

[, , <

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

from faker import Faker

fake = Faker("zh_CN")

print(fake.last_name())

print(fake.first_name())

print(fake.name_male())

更多支持的模拟假数据地址

https://faker.readthedocs.io/en/stable/providers/faker.providers.address.html

17bd3c3e-db52-eb11-8da9-e4434bdf6706.svg

Address

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()# '路'

17bd3c3e-db52-eb11-8da9-e4434bdf6706.svg

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'

17bd3c3e-db52-eb11-8da9-e4434bdf6706.svg

Company

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

faker.bs()

# 'grow rich initiatives'

faker.catch_phrase()

# 'Self-enabling encompassing function'

faker.company()

# '恒聪百汇网络有限公司'

faker.company_prefix()

# '晖来计算机'

faker.company_suffix()

# '信息有限公司'

17bd3c3e-db52-eb11-8da9-e4434bdf6706.svg

Credit Card

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

faker.credit_card_expire(start="now", end="+10y", date_format="%m/%y")

# '08/20'

faker.credit_card_full(card_type=None)

# 'Mastercardn玉兰 范n5183689713096897 01/25nCVV: 012n'

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'

17bd3c3e-db52-eb11-8da9-e4434bdf6706.svg

Date Time

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_century(before_today=True, after_today=False)

# datetime.date(2011, 6, 12)

faker.date_this_decade(before_today=True, after_today=False)

# datetime.date(2011, 8, 22)

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

# datetime.date(2019, 7, 25)

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.date_time_this_decade(before_now=True, after_now=False, tzinfo=None)

# datetime.datetime(2010, 5, 25, 20, 20, 52)

faker.date_time_this_month(before_now=True, after_now=False, tzinfo=None)

# datetime.datetime(2019, 7, 19, 18, 4, 6)

faker.date_time_this_year(before_now=True, after_now=False, tzinfo=None)

# datetime.datetime(2019, 3, 15, 11, 4, 18)

faker.day_of_month()

# '04'

faker.day_of_week()

# 'Monday'

faker.future_date(end_date="+30d", tzinfo=None)

# datetime.date(2019, 8, 12)

faker.future_datetime(end_date="+30d", tzinfo=None)

# datetime.datetime(2019, 8, 24, 2, 59, 4)

faker.iso8601(tzinfo=None, end_datetime=None)

# '1987-07-01T18:33:56'

faker.month()

# '11'

faker.month_name(

# 'August'

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_delta(end_datetime=None)

# datetime.timedelta(0)

faker.time_object(end_datetime=None)

# datetime.time(22, 12, 15)

faker.time_series(start_date="-30d", end_date="now", precision=None, distrib=None, tzinfo=None)

#

faker.timezone()

# 'Indian/Comoro'

faker.unix_time(end_datetime=None, start_datetime=None)

# 1182857626

faker.year()

# '1970'

17bd3c3e-db52-eb11-8da9-e4434bdf6706.svg

File

用于生成文件和文件路径相关的数据,包括文件扩展名、文件路径、MIME_TYPE、磁盘分区等内容

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'

17bd3c3e-db52-eb11-8da9-e4434bdf6706.svg

Lorem

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)

# ('只是当前国内中文所以.威望系统在线虽然.n'

#  '图片人民非常合作这种谢谢更新.名称详细直接社会一直首页完全.n'

#  '重要更多只要市场.必须只是学生音乐.系统美国类别这些一切环境.n'

#  '但是的话人民美国关于.n'

#  '情况专业国际看到研究.音乐环境市场搜索发现.n'

#  '工具还是到了今天位置人民.留言作者品牌工程项目必须.上海精华现在我们新闻应该关系.n'

#  '更新经济能力全部资源如果.手机能够登录国内.')

faker.texts(nb_texts=3, max_nb_chars=200, ext_word_list=None)

# [   '成功可能推荐你的行业.地区而且推荐.n'

#     '网络不断是一主要必须.开始安全服务.n'

#     '应该网上通过以后通过大学.管理要求有关国际阅读当前.为了应该结果点击公司开始怎么.n'

#     '成功一次最大生产网站.这种加入她的地址有限.n'

#     '根据新闻汽车起来非常主题显示必须.有些建设来自作者电话支持.n'

#     '只是资源还是由于经济事情喜欢.为什中文大小得到服务.网络密码是否免费参加一次社区欢迎.',

#     '部门活动技术.商品影响发生行业密码完成.就是部门结果资料学习当然.或者帮助城市要求首页市场教育你们.n'

#     '专业完全分析处理城市大学什么.n'

#     '文件非常国际全部起来积分公司.资料的是电影没有.这是本站需要.n'

#     '合作重要没有现在市场开发空间.您的会员推荐成功教育进行中国.n'

#     '文件不是如果评论.因为经验设备规定.n'

#     '加入一起影响网上大家运行在线如果.工程企业这种以后.',

#     '空间市场出现必须基本电话.显示一个标准其他设计作品.工程不断新闻问题更多更新这么.n'

#     '一起简介网上内容不会.任何知道各种两个.类别事情经营那么投资市场.n'

#     '那些使用介绍公司朋友人民你们浏览.应该表示一点一般说明主要谢谢.电话回复起来经验一个来源加入.n'

#     '地区法律其他表示虽然.参加社会喜欢有限论坛一般发布.类别目前文化可以.n'

#     '报告质量工作主要.企业发布完全.得到名称作者等级两个论坛只要电话.']

faker.word(ext_word_list=None)

# '注意'

faker.words(nb=3, ext_word_list=None, unique=False)

# ['责任', '组织', '以后']

17bd3c3e-db52-eb11-8da9-e4434bdf6706.svg

Misc

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)

# '1e909d331e20cf241aaa2da894deae5a3a75e5cdc35c

053422d9b8e7ccfa0402'

faker.uuid4(cast_to=)

# '6e6fe387-6877-48d9-94ea-4263c4c71aa5'

17bd3c3e-db52-eb11-8da9-e4434bdf6706.svg

设置seed

有时候我们需要的数据是固定的,设置seed值,可以保持每次取到的值是一致的

from faker import Faker

fake = Faker("zh_CN")

# 设置seed 值

fake.seed(1222)

print(fake.credit_card_full())

print(fake.date_time())

9da249c0c8ac3e4636fb94797151e9e4.png

往期精彩文章

喜报来了!凡猫学员薪资最高16K!

金融行业软件测试介绍

2020年为什么大家都开始学习自动化测试?

学习测试开发前 你需要掌握的python 代码水平

1万+软件测试人员都在学的精品课程免费送,大家别错过

44de2e6366799410bb5a4ad8fd50af91.gif
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值