找回密码
 会员注册
查看: 35|回复: 0

Python中的Faker库:生成Mock数据的利器(文末有场景举例)

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
71362
发表于 2024-9-6 11:17:59 | 显示全部楼层 |阅读模式
Faker库是Python中一个强大的Mock数据生成库,可以帮助开发者快速生成各种Mock数据,从而简化开发和测试过程。在开发项目中,我们经常需要生成一些虚拟数据,如虚拟用户、订单、地址等。为了简化这个过程,Python提供了Faker库,一个强大的Mock数据生成器。本文将详细介绍Faker库的用法、作用以及代码示例,帮助你更好地在项目中运用Faker。一、Faker库简介Faker是Python的一个第三方库,用于生成虚拟数据。它支持全球各地的地名、职业、性别等数据生成。Faker库的核心功能是通过强大的生成算法,随机生成真实世界中的类似数据。Faker库广泛应用于数据测试、数据清洗和数据填充等领域。二、Faker库的安装Faker库的安装非常简单,只需使用pip命令即可:pipinstallFaker三、Faker内置测试数据的用法fromfakerimportFakerfromcollectionsimportOrderedDict#fake=Faker(["en_US","zh_CN","ja_JP"])fake=Faker(["zh_CN"])#print(fake.name())#print(fake['en-US'].name())#print(fake.company())#1、使用?#自定义规则,随机生成字符串print(fake.bothify())#默认生成字符串格式:05RWprint(fake.bothify(text="666????####",letters='我们的家'))#letters的字符串随机给text的?使用,##默认数字代替,格式如:我我的我4777#2、使用^自定义规则,随机生成16进制字符串print(fake.hexify(text='MACAddress:^^:^^:^^:^^:^^:^^',upper=True))#MACAddress:CD:18:FC:9F:B6:49#3、随机生成i18n语言的代码print(fake.language_code())#yo#4、使用?自定义规则,随机生成ASCII字符串print(fake.lexify(text='RandomIdentifier:??????????',letters='我ABCDE'))#RandomIdentifier:CBC我DD我ABE#5、随机生成i18n区域设置print(fake.locale())#zh_CH#6、使用#!@%自定义规则,随机生成字符串print(fake.numerify(text='#@!!@%'))#1987(#=[0,9]%=[1,9]!=随机数字或空字符@=非0数字或空字符)#7、随机选择对象元素,并随机生成列表print(fake.random_choices(elements=('a','b','c','d'),length=10))#['a','c','c','d','a','d','d','b','b','a']print(fake.random_choices(elements=OrderedDict([("a",0.45),("b",0.35),("c",0.15),("d",0.05),])))#['b','c','a','a']#8、随机生成0-9整数print(fake.random_digit())#0#9、随机生成1-9整数print(fake.random_digit_not_null())#1#10、随机生成0-9整数或空值print(fake.random_digit_or_empty())#""#11、随机选择元素,默认可重复、长度为1print(fake.random_element(elements=('a','b','c','d')))#aprint(fake.random_element(elements=OrderedDict([("a",0.45),("b",0.35),("c",0.15),("d",0.05),])))#a#12、随机选择元素,默认可重复、长度不定print(fake.random_elements(elements=('a','b','c','d'),unique=False))print(fake.random_elements(elements=OrderedDict([("a",0.45),("b",0.35),("c",0.15),("d",0.05),]),length=20,unique=False))#13、在指定范围内,随机生成整数print(fake.random_int(min=0,max=15,step=3))#14、随机生成ASCII字符串[a-zA-Z]print(fake.random_letter())#'y'#15、随机生成ASCII字符串列表[a-zA-Z]print(fake.random_letters(length=10))#['R','N','v','n','A','v','O','p','y','E']#16、随机生成ASCII小写字符串print(fake.random_lowercase_letter())#c#17、随机生成整数'''如果digits为None(默认值),则取值范围为1~9之间的随机整数。如果fix_len为False(默认值),则可以生成所有不超过位数的整数。如果fix_len为True,则只能生成具有精确位数的整数。'''print(fake.random_number(fix_len=True))#297371print(fake.random_number(digits=3,fix_len=False))#577#18、随机生成元素不重复的不超出元素数量的列表print(fake.random_sample(elements=('a','b','c','d','f','f'),length=6))#元素可相同,但length不能大于6#19、生成大写字母的ASCII字符串print(fake.random_uppercase_letter())#20、随机生成接近某个数字的整数'''如果le为False(默认值),则允许生成数量的140%。如果为True,则上限生成为100%。如果ge为False(默认值),则允许生成数量减少到60%。如果为True,下限生成上限为100%。如果提供了最小值的数值,则生成的小于最小值的值将被固定在最小值。如果为max提供了一个数值,则生成的大于max的值将被固定在max。如果le和ge都为True,则number的值将自动返回,而不管提供的min和max的值是什么。'''print(fake.randomize_nb_elements(number=100))#83print(fake.randomize_nb_elements(number=100,le=True,ge=True,min=80))#100#21、随机生成地址和邮政编号print(fake.address())#22、随机生成门牌号print(fake.building_number())#23、随机生成城市print(fake.city())#24、随机生成特殊市print(fake.city_suffix())#25、随机生成国家print(fake.country())#26、随机生成国家编号print(fake.country_code())#27、生成当前国家print(fake.current_country())#28、生成当前国家编号print(fake.current_country_code())#29、随机生成邮编print(fake.postcode())#30、随机生成街道地址print(fake.street_address())#31、随机生成街道名称print(fake.street_name())#32、随机生成街道名称后缀print(fake.street_suffix())#33、随机生成汽车供应商牌照print(fake.license_plate())#974-XXRA#34、生成ABA的路由传输号print(fake.aba())#35、生成银行提供商的ISO3166-1alpha-2国家代码print(fake.bank_country())#GB#36、生成基本银行帐号(BBAN)print(fake.bban())#MAAN00447407504564#37、生成国际银行账号(IBAN)print(fake.iban())#38、生成SWIFT代码print(fake.swift(length=11,primary=True,use_dataset=True))#SVWBGBNKXXX#39、生成11位的SWIFT代码print(fake.swift11(use_dataset=True))#SVWBGBNKXXX#40、生成8位的SWIFT代码print(fake.swift8(use_dataset=True))#41、生成EAN码print(fake.ean(prefixes=('45','49'),length=13))#4532804944052#42、生成EAN13码print(fake.ean13(prefixes=('45','49')))#4518561138095#43、生成EAN8码print(fake.ean8(prefixes=('45','49')))#45877841#44、生成指定长度的本地化EAN条码print(fake.localized_ean(length=8))#45、生成指定长度的本地化EAN13条码print(fake.localized_ean13())#46、生成指定长度的本地化EAN8条码print(fake.localized_ean8())#47、生成随机颜色值print(fake.color(hue='red'))print(fake.color(luminosity='light'))print(fake.color(hue=(100,200),color_format='rgb'))print(fake.color(hue='orange',luminosity='bright'))print(fake.color(hue=135,luminosity='dark',color_format='hsv'))print(fake.color(hue=(300,20),luminosity='random',color_format='hsl'))#48、随机生成颜色名称print(fake.color_name())#49、生成一个十六进制三元组格式的颜色print(fake.hex_color())#50、生成一个以逗号分隔的RGB值格式的颜色print(fake.rgb_color())#51、用CSSrgb()函数生成颜色格式print(fake.rgb_css_color())#52、生成一个网络安全的颜色名称print(fake.safe_color_name())#53、生成一个网络安全的颜色格式为十六进制三重print(fake.safe_hex_color())#54、公司相关(技术\思想\名称...)print(fake.bs())#leverageplug-and-playnetworksprint(fake.catch_phrase())print(fake.company())print(fake.company_suffix())#55、信用卡相关print(fake.credit_card_expire())#09/28print(fake.credit_card_full())#'Discover\nKatherineFisher\n658764759382421805/26\nCVC:892\n'print(fake.credit_card_number())#6504876475938248print(fake.credit_card_provider())#VISA19digitprint(fake.credit_card_security_code())#604#56、货币相关print(fake.cryptocurrency())print(fake.cryptocurrency_code())print(fake.cryptocurrency_name())print(fake.currency())print(fake.currency_code())print(fake.currency_name())print(fake.currency_symbol())print(fake.pricetag())#57、时间相关print(fake.am_pm())print(fake.century())print(fake.date())print(fake.date_between())print(fake.date_between_dates())print(fake.date_object())print(fake.date_of_birth())print(fake.date_this_century())print(fake.date_this_decade())print(fake.date_this_month())print(fake.date_this_year())print(fake.date_time())print(fake.date_time_ad())print(fake.date_time_between())print(fake.date_time_between_dates())print(fake.date_time_this_century())print(fake.date_time_this_decade())print(fake.date_time_this_month())print(fake.date_time_this_year())print(fake.day_of_month())print(fake.day_of_week())print(fake.future_date())print(fake.future_datetime())print(fake.iso8601())print(fake.month())print(fake.month_name())print(fake.past_date())print(fake.past_datetime())print(fake.pytimezone())print(fake.time())print(fake.time_delta())print(fake.time_object())print(fake.time_series())print(fake.timezone())print(fake.unix_time())print(fake.year())#58、文件相关print(fake.file_extension())print(fake.file_extension(category='image'))print(fake.file_name(category='audio'))print(fake.file_name(extension='abcdef'))print(fake.file_name(category='audio',extension='abcdef'))print(fake.file_path(depth=3))print(fake.file_path(depth=5,category='video'))print(fake.file_path(depth=5,category='video',extension='abcdef'))print(fake.mime_type())print(fake.mime_type(category='application'))print(fake.unix_device())print(fake.unix_device(prefix='mmcblk'))print(fake.unix_partition())print(fake.unix_partition(prefix='mmcblk'))#59、陆地坐标数据print(fake.coordinate())print(fake.latitude())print(fake.latlng())print(fake.local_latlng())print(fake.location_on_land())print(fake.longitude())#60、因特网相关print(fake.ascii_company_email())#邮箱print(fake.ascii_email())#ascii邮箱print(fake.ascii_free_email())print(fake.ascii_safe_email())print(fake.company_email())#公司邮箱print(fake.dga())#网址print(fake.domain_name())#网址print(fake.domain_word())print(fake.email())print(fake.free_email())print(fake.free_email_domain())print(fake.hostname())print(fake.http_method())#http请求方法print(fake.iana_id())#IANA注册IDprint(fake.ipv4())#随机ipprint(fake.ipv4_network_class())#网络类别print(fake.ipv4_private())print(fake.ipv4_public())print(fake.ipv6())print(fake.mac_address())#mac地址print(fake.nic_handle())#网卡处理IDprint(fake.nic_handles())print(fake.port_number())#端口号print(fake.ripe_id())#组织IDprint(fake.safe_domain_name())#域名print(fake.safe_email())#邮箱print(fake.slug())#Django算法print(fake.tld())#域名后缀print(fake.uri())#http请求路径print(fake.uri_extension())print(fake.uri_page())#请求页面名print(fake.uri_path())#资源路径print(fake.url())#urlprint(fake.user_name())#用户名#61、isbn规则相关print(fake.isbn10())print(fake.isbn13())#62、工作的职位名称print(fake.job())#63、文章相关print(fake.paragraph(nb_sentences=5))#生成段落print(fake.paragraph(nb_sentences=5,variable_nb_sentences=False))print(fake.paragraph(nb_sentences=5,ext_word_list=['abc','def','ghi','jkl']))print(fake.paragraph(nb_sentences=5,variable_nb_sentences=False,ext_word_list=['abc','def','ghi','jkl']))print(fake.paragraphs(nb=5))#生成段落listprint(fake.sentence(nb_words=10))#生成一个句子print(fake.sentence(nb_words=10,variable_nb_words=False))print(fake.sentences())#生成句子listprint(fake.sentences(nb=5))print(fake.text(max_nb_chars=20))#文本字符串print(fake.text(max_nb_chars=80))print(fake.text(max_nb_chars=160))print(fake.text(ext_word_list=['abc','def','ghi','jkl']))print(fake.texts(nb_texts=5))#文本字符串列表print(fake.texts(nb_texts=5,max_nb_chars=50))print(fake.texts(nb_texts=5,max_nb_chars=50,ext_word_list=['abc','def','ghi','jkl']))print(fake.word())#词语字符串print(fake.word(ext_word_list=['abc','def','ghi','jkl']))print(fake.words())#词语列表print(fake.words(nb=5,ext_word_list=['abc','def','ghi','jkl']))print(fake.words(nb=4,ext_word_list=['abc','def','ghi','jkl'],unique=True))#数据类型相关print(fake.binary(length=64))#创建字节print(fake.boolean(chance_of_getting_true=75))#布尔类型print(fake.csv(header=('Name','Address','FavoriteColor'),data_columns=('{{name}}','{{address}}','{{safe_color_name}}'),num_rows=10,include_row_ids=True))#生成随机的逗号分隔值print(fake.dsv(data_columns=('{{name}}','{{address}}'),num_rows=5,delimiter='))#生成随机分隔符分隔值。print(fake.fixed_width(data_columns=[(20,'name'),(3,'pyint',{'min_value':50,'max_value':100})],align='right',num_rows=2))#生成随机固定宽度值print(fake.image(size=(16,16),hue=[90,270],image_format='ico'))#使用Python图像库生成一张图片并在上面绘制一个随机的多边形。如果没有安装它,这个提供程序将无法运行。以给定格式返回表示图像的字节。print(fake.json(data_columns=[('Name','name'),('Points','pyint',{'min_value':50,'max_value':100})],num_rows=1))#生成随机的JSON结构值print(fake.md5(raw_output=False))#生成MD5数据print(fake.null_boolean())#生成空值或布尔值print(fake.password(length=12))#生成密码print(fake.password(length=40,special_chars=False,upper_case=False))print(fake.psv(header=('Name','Address','FavoriteColor'),data_columns=('{{name}}','{{address}}','{{safe_color_name}}'),num_rows=10,include_row_ids=True))#生成随机的管道分隔值print(fake.sha1(raw_output=False))#生成一个随机的SHA1哈希print(fake.sha256(raw_output=False))#生成一个随机的SHA256哈希print(fake.tar(uncompressed_size=256,num_files=32,min_file_size=4,compression='bz2'))#生成包含一个随机有效tar文件的字节对象。print(fake.tsv(header=('Name','Address','FavoriteColor'),data_columns=('{{name}}','{{address}}','{{safe_color_name}}'),num_rows=10,include_row_ids=True))#生成随机的制表符分隔值print(fake.uuid4())#如果使用可调用对象指定,则生成一个随机UUID4对象并将其转换为另一种类型print(fake.uuid4(cast_to=None))print(fake.zip(uncompressed_size=256,num_files=32,min_file_size=4,compression='bz2'))#生成包含一个随机有效的zip归档文件的bytes对象。#人相关print(fake.first_name())#人名print(fake.first_name_female())#女名print(fake.first_name_male())#男名print(fake.first_name_nonbinary())print(fake.language_name())print(fake.last_name())print(fake.last_name_female())print(fake.last_name_male())print(fake.last_name_nonbinary())print(fake.name())print(fake.name_female())print(fake.name_male())print(fake.name_nonbinary())print(fake.prefix())print(fake.prefix_female())print(fake.prefix_male())print(fake.prefix_nonbinary())print(fake.suffix())print(fake.suffix_female())print(fake.suffix_male())print(fake.suffix_nonbinary())#电话号码相关print(fake.country_calling_code())#区号print(fake.msisdn())print(fake.phone_number())#个人信息相关print(fake.profile())print(fake.simple_profile())#python相关(python数据类型)print(fake.pybool())print(fake.pydecimal())print(fake.pydict())print(fake.pyfloat())print(fake.pyint())print(fake.pyiterable())print(fake.pylist())print(fake.pyset())print(fake.pystr())print(fake.pystr_format())print(fake.pystruct())print(fake.pytuple())#ssnprint(fake.ssn())#865-50-6891#默认用户代理相关、认证信息相关、通行证相关print(fake.android_platform_token())print(fake.chrome())print(fake.firefox())print(fake.internet_explorer())print(fake.ios_platform_token())print(fake.linux_platform_token())print(fake.linux_processor())print(fake.mac_platform_token())print(fake.mac_processor())print(fake.opera())print(fake.safari())print(fake.user_agent())print(fake.windows_platform_token())四、Faker库的使用场景举例Faker库的使用方法相当简单,主要有以下几种生成虚拟数据的方法:1.生成随机字符串fromfakerimportFakerfake=Faker()random_string=fake.pystr(length=10)print(random_string)2.生成随机地名fromfakerimportFakerfake=Faker()country=fake.country_code()city=fake.city_name(country=country)print(f"国家:{country},城市:{city}")3.生成随机职业fromfakerimportFakerfake=Faker()job=fake.job()print(job)4.生成随机性别fromfakerimportFakerfake=Faker()gender=fake.gender()print(gender)5. 生成随机手机号码在测试短信验证、用户注册等场景时,我们需要生成随机的手机号码。Faker库可以很方便地生成虚拟的手机号码,示例代码如下:fromfakerimportFakerfake=Faker()phone_number=fake.phone_number()print(phone_number)6. 生成随机日期在测试日期相关功能或者填充数据库时,我们可能需要生成随机的日期数据。Faker库可以生成各种格式的随机日期,示例代码如下:fromfakerimportFakerfake=Faker()random_date=fake.date_of_birth(minimum_age=18,maximum_age=65)print(random_date)7. 生成随机颜色在设计和开发图形界面或数据可视化时,我们可能需要生成随机的颜色数据。Faker库可以生成各种格式的随机颜色,示例代码如下:fromfakerimportFakerfake=Faker()random_color=fake.hex_color()print(random_color)8. 生成随机IP地址在网络安全测试、日志分析等场景中,我们可能需要生成随机的IP地址数据。Faker库可以生成合法的随机IP地址,示例代码如下:fromfakerimportFakerfake=Faker()random_ip=fake.ipv4()print(random_ip)9. 生成随机密码在用户注册、账号管理等场景中,我们需要生成随机的密码。Faker库可以生成各种复杂度的随机密码,示例代码如下:fromfakerimportFakerfake=Faker()random_password=fake.password(length=8,special_chars=True,digits=True,upper_case=True,lower_case=True)print(random_password)10. 生成随机公司名称在测试企业相关功能或者填充数据库时,我们可能需要生成随机的公司名称。Faker库可以生成各种类型的随机公司名称,示例代码如下:fromfakerimportFakerfake=Faker()company_name=fake.company()print(company_name)11. 生成虚拟订单数据在需要测试电商、外卖等订单系统时,我们可以使用Faker库生成虚拟订单数据。以下是一个生成虚拟订单数据的示例::fromfakerimportFakerimportrandomfake=Faker()#生成随机商品名称product_name=fake.product_name(length=10)#生成随机商品价格product_price=random.randint(10,100)#生成随机订单号order_id=fake.order_id(length=10)#生成随机用户名user_name=fake.username(length=10)#生成随机配送地址address=fake.address()#生成随机支付方式payment_method=fake.payment_method()#生成随机下单时间order_time=fake.between(start_date="-5y",end_date="today").isoformat()#输出虚拟订单数据print(f"订单号:{order_id}\n商品名称:{product_name}\n商品价格:{product_price}\n用户名:{user_name}\n地址:{address}\n支付方式:{payment_method}\n下单时间:{order_time}")五、总结本文介绍了Faker库的用法、更多的应用场景,并提供了丰富的代码示例。Faker库在生成各种虚拟数据方面非常强大,可以应用于各种开发和测试场景中。通过使用Faker库,开发者可以更加高效地生成虚拟数据,提高开发和测试的效率。希望本文可以帮助读者更好地理解和应用Faker库。行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群:320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:​这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-9 20:13 , Processed in 1.240489 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表