程序员如何快速构造测试数据

作者: vipcoding | 来源:发表于2020-07-03 11:27 被阅读0次

相信广大秃顶朋友们在编写程序过程中,经常要构造很多数据来进行测试
如果手动造数据、将花费大把精力,这不合理

正确做法 使用Python中的 Faker 库,用它生成各种各样的伪数据。

安装Faker

使用pip安装(python3 使用 pip3)

pip install Faker

基本用法

from faker import Faker   # 1
 
fake = Faker()            # 2
 
fake.name()               # 3
# Donna Kelly
 
fake.address()            # 4
# 519 Donna River
# Port Natalie, SD 87384
  1. 从faker模块导入Faker这个类。

  2. 实例化,保存到变量fake中。

  3. 调用name()方法随机生成一个名字。

  4. 调用address()方法随机生成地址信息。

如果要生成中文的随机数据,我们可以在实例化时给locale参数传入‘zh_CN’这个值:

from faker import Faker
 
fake = Faker(locale='zh_CN')
 
fake.name()
# 庞超
 
fake.address()
# 河北省辛集县合川张街p座 489476

如果要生成中文繁体字,则可以传入中国台湾这个地区的值'zh_TW'(当然地址显示的是台湾的):

from faker import Faker
 
fake = Faker(locale='zh_TW')
 
fake.name()
# 羅婉婷
 
fake.address()
# 16934 大里縣水源巷35號之0

如果要生成其他语种或地区的数据,我们可以传入相应的地区值:

ar_EG - Arabic (Egypt)
ar_PS - Arabic (Palestine)
ar_SA - Arabic (Saudi Arabia)
bg_BG - Bulgarian
bs_BA - Bosnian
...

其他方法

注:个别方法具有针对性,比如province()方法适用中国,但不适用美国及其他一些国家。
地址

fake.address()            # 地址
# '香港特别行政区大冶县上街钟街k座 664713'
 
fake.building_number()    # 楼名
# 'v座'
 
fake.city()               # 完整城市名
# '长春县'
 
fake.city_name()          # 城市名字(不带市县)
# '梧州'
 
fake.city_suffix()        # 城市后缀名
# '市'
 
fake.country()            # 国家名称
# '厄立特里亚'
 
fake.country_code(representation="alpha-2")
# 'BZ'                    # 国家编号
 
fake.district()           # 地区
# '沙湾'
 
fake.postcode()           # 邮编
# '332991'
 
fake.province()           # 省
# '河北省'
 
fake.street_address()     # 街道地址
# '武汉街D座'
 
fake.street_name()        # 街道名称
# '广州路'

fake.street_suffix()      # 街道后缀名
# '路'

汽车

fake.license_plate()      # 牌照
# 'ZCO 000'

银行

fake.bank_country()          # 银行所属国家
# 'GB'
 
fake.bban()                  # 基本银行账号
# 'TPET9323218579379'
 
fake.iban()                  # 国际银行代码
# 'GB82IRVM1531009974701'

条形码

fake.ean(length=13)    # EAN条形码
# '5456457843465'
 
fake.ean13()           # EAN13条形码
# '2689789887590'
 
fake.ean8()            # EAN8条形码
# '52227936'

颜色

fake.color_name()        # 颜色名称
# 'Orange'
 
fake.hex_color()         # 颜色十六进制值
# '#a5cb7c'
 
fake.rgb_color()         # 颜色RGB值
# '15,245,42'
 
fake.rgb_css_color()     # CSS颜色值
# 'rgb(15,70,13)'
 
fake.safe_color_name()   # 安全色
# 'aqua'
 
fake.safe_hex_color()    # 安全色十六进制值
# '#881100'

公司

fake.bs()                 # 商业用词
# 'synthesize strategic vortals'
 
fake.catch_phrase()       # 妙句(口号)
# 'Robust even-keeled service-desk'
 
fake.company()            # 公司名称
# '富罳科技有限公司'
 
fake.company_prefix()     # 公司名称前缀
# '商软冠联'
 
fake.company_suffix()     # 公司名称后缀
# '网络有限公司'

信用卡

fake.credit_card_expire(start="now", end="+10y", date_format="%m/%y")    # 过期年月
# '11/20'
 
fake.credit_card_full(card_type=None)            # 完整信用卡信息
# 'VISA 16 digit\n秀珍 卢\n4653084445257690 11/19\nCVC: 935\n'
 
fake.credit_card_number(card_type=None)          # 信用卡卡号
# '4339481813664365360'
 
fake.credit_card_provider(card_type=None)        # 信用卡提供商
# 'VISA 19 digit'
 
fake.credit_card_security_code(card_type=None)   # 信用卡安全码
# '597'

货币

fake.cryptocurrency()           # 加密货币代码+名称
# ('TRX', 'TRON')
 
fake.cryptocurrency_code()      # 加密货币代码
# 'MZC'
 
fake.cryptocurrency_name()      # 加密货币名称
# 'Ripple'
 
fake.currency()                 # 货币代码+名称
# ('GNF', 'Guinean franc')
 
fake.currency_code()            # 货币代码
# 'SOS'
 
fake.currency_name()            # 货币名称
# 'Lebanese pound'

时间

fake.am_pm()        # AM或PM
# 'PM'
 
fake.century()      # 世纪
# 'XII'
 
fake.date(pattern="%Y-%m-%d", end_datetime=None)            
# '1998-05-13'
 
fake.date_between(start_date="-30y", end_date="today")      # 日期(可设置限定范围)
# datetime.date(2014, 8, 17)
 
fake.day_of_month()   # 几号
# '23'
 
fake.day_of_week()    # 星期几
# 'Tuesday'
 
fake.future_date(end_date="+30d", tzinfo=None)        # 未来日期
# datetime.date(2019, 10, 28)
 
fake.future_datetime(end_date="+30d", tzinfo=None)    # 未来日期和时间
# datetime.datetime(2019, 10, 28, 21, 4, 35)
 
fake.iso8601(tzinfo=None, end_datetime=None)          # iso8601格式日期和时间
# '1995-04-10T00:45:01'

文件

fake.file_extension(category=None)                # 文件扩展名
# 'avi'
 
fake.file_name(category=None, extension=None)     # 文件名
# '专业.pptx'
 
fake.file_path(depth=1, category=None, extension=None)    # 文件路径
# '/的话/以上.ods'
 
fake.mime_type(category=None)                     # MIME类型
# 'application/xop+xml'
 
fake.unix_device(prefix=None)                     # UNIX设备
# '/dev/xvdq'
 
fake.unix_partition(prefix=None)                  # UNIX分区
# '/dev/xvdc6'

坐标

fake.coordinate(center=None, radius=0.001)        # 坐标
# Decimal('147.543284')
 
fake.latitude()                                   # 纬度
# Decimal('66.519139')
 
fake.latlng()                                     # 经纬度
# (Decimal('55.3370965'), Decimal('-15.427896'))
 
fake.local_latlng(country_code="US", coords_only=False)    # 返回某个国家某地的经纬度
# ('25.67927', '-80.31727', 'Kendall', 'US', 'America/New_York')
 
fake.location_on_land(coords_only=False)                   # 返回地球上某个位置的经纬度
# ('42.50729', '1.53414', 'les Escaldes', 'AD', 'Europe/Andorra')

人物

fake.first_name()            # 名字
# '强'
 
fake.first_name_female()     # 名字(女)
# '桂荣'
 
fake.first_name_male()       # 名字(男)
# '志强'
 
fake.first_romanized_name()  # 名字(罗马文)
# 'Chao'
 
fake.last_name()             # 姓
# '宋'
 
fake.last_name_female()      # 姓(女)
# '陆'
 
fake.last_name_male()        # 姓(男)
# '曾'
 
fake.last_romanized_name()   # 姓(罗马文)
# 'Xie'
 
fake.name()                  # 姓名
# '王凯'

电话

fake.msisdn()                # 完整手机号码(加了国家和国内区号)
# '9067936325890'
 
fake.phone_number()          # 手机号
# '18520149907'
 
fake.phonenumber_prefix()    # 区号
# 145

档案

fake.profile(fields=None, sex=None)        # 档案(完整)
# {   'address': '河南省昆明市清河哈尔滨路H座 496152',
#     'birthdate': datetime.date(2014, 11, 20),
#     'blood_group': 'AB+',
#     'company': '易动力信息有限公司',
#     'current_location': (Decimal('77.504143'), Decimal('-167.365806')),
#     'job': '培训策划',
#     'mail': 'liangyang@yahoo.com',
#     'name': '杨磊',
#     'residence': '澳门特别行政区台北县西夏兴城街L座 803680',
#     'sex': 'F',
#     'ssn': '140722200004166520',
#     'username': 'lei65',
#     'website': [   'http://www.29.cn/',
#                    'http://www.lei.cn/',
#                    'http://lishao.net/',
#                    'https://www.feng.net/']}
 
fake.simple_profile(sex=None)               # 档案(简单)
# {   'address': '广西壮族自治区南宁市花溪孙街c座 653694',
#     'birthdate': datetime.date(1993, 12, 16),
#     'mail': 'haomin@yahoo.com',
#     'name': '任秀英',
#     'sex': 'F',
#     'username': 'iding'}

身份证

fake.ssn(min_age=18, max_age=90)    # 身份证
# '410622198603154708'

觉得有用\color{red}{请关注该公众号}、或微信搜索 \color{red}{vipcoding} 查看更多编程小技巧
祝各位早日达到 装x如风、常伴吾身的境界 !

wx.jpg

相关文章

  • 程序员如何快速构造测试数据

    相信广大秃顶朋友们在编写程序过程中,经常要构造很多数据来进行测试如果手动造数据、将花费大把精力,这不合理 正确做法...

  • JMeter造测试数据

    1. 问题 为什么需要造测试数据?如果对数据无特别需求,请忽略本文 如何简单快速构造测试数据? 2. 拆解 将问题...

  • 如何构造测试数据

    前言 我这里只是专注于生成CSV等测试数据文件 每次构造测试数据的时候就很头疼,之前自己简单造个两三行还行,造多了...

  • 使用Django快速完成测试数据构造(一)

    身为中台测试,很多功能需要依赖前端数据支撑,可以说是“测试5分钟,造数半小时”,实在无法忍受,于是学习了pytho...

  • 使用Django快速完成测试数据构造(二)

    作为一枚中台测试,我们的功能太过依赖上游数据,比如我只需要测试支付,但必须要一步步填写各种资料提交订单才可以测支付...

  • oracle构造测试数据

    1.网上常见SQL,大约超过100w后,会提示内存不足,创建失败: 2.使用数据工具进行mock,如DBEAVER...

  • 工作中如何构造测试数据

    在日常的测试工作中,大家是否会遇到类似的问题呢? 1、比如页面数据不够,翻页功能无法测试 2、页面某些功能暂时没有...

  • 常用调试代码

    2019年12月29日1.测试数据构造 2.调试打印代码

  • 如何快速新增百万测试数据?

    柠檬班的APP上线之前,需要一百万个学员的信息进行压力测试。 那么数据从哪里来呢?直接找开发帮忙?可能会被他鄙视!...

  • eclipse快速构造方法

    eclipse快速构造方法 创建一个类,定义完私有属性,如果我们想快速构造set,get,toString和构造自...

网友评论

    本文标题:程序员如何快速构造测试数据

    本文链接:https://www.haomeiwen.com/subject/qxojqktx.html