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

作者: 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

    相关文章

      网友评论

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

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