美文网首页
数据工厂 - Faker

数据工厂 - Faker

作者: halfempty | 来源:发表于2019-04-17 19:27 被阅读0次

    前言

    无论是性能测试, 还是大数据的测试, 甚至基本的功能测试, 造数据都是一件棘手的事
    抛开数据间的关联关系不谈, 各种类型的数据长短不一, 格式不一, 单纯的复制粘贴不利于识别, 也不符合一般的数据场景
    有幸得知Faker模块, 解决了大部分的数据构造问题

    使用

    语法特别简单, 学习参考: https://faker.readthedocs.io/en/master/index.html

    from faker import Faker
    
    fake = Faker(locale='zh-CN')
    print(
        fake.email(),
        fake.domain_name(),
        fake.hostname(),
        fake.url(),
        fake.ipv4(),
        fake.ipv6(),
        fake.mac_address(),
        fake.name(),
        fake.province(),
        fake.address(),
        fake.phone_number(),
        fake.job(),
        sep='\n'
    )
    ----------------------------
    sunwei@ox.cn
    jie.cn
    desktop-52.zhong.cn
    https://www.qiangna.cn/
    96.147.217.87
    a3b5:3ca6:21d:2cf7:a61f:ae69:145b:74d7
    5c:87:ba:89:dd:ac
    蒋建
    山西省
    湖南省建市沈北新深圳街a座 238009
    18770641692
    硬件工程师
    

    深入理解

    构造数据的思路大体相似, 采用随机方式

    • 模板数据, 通过正则将模板中的占位符替换成数字/字母等
    • 约束数据, 如省/市, 域名后缀等, 预置列表

    各类数据通过不同的provider实现, provider定义数据模板和具体实现
    内置provider有address, color, compnay, internet, person, geo, user_agent等, 不过并不是所有类型都适用于zh_CN

    我们看一下如何生成姓名

    • person基类
    class Provider(BaseProvider):
        formats = ['{{first_name}} {{last_name}}']
    
        first_names = ['John', 'Jane']
    
        last_names = ['Doe']
    
        def name(self):
            """
            :example 'John Doe'
            """
            pattern = self.random_element(self.formats)
            return self.generator.parse(pattern)
        ....
    
    • 中文下的person继承基类, 并override
    class Provider(PersonProvider):
       formats = ["{{last_name}}{{first_name}}"]
    
       first_names_male = [
           "伟", "强", "磊", "洋", "勇", "军", "杰", "涛", "超", "明", "刚", "平", "辉", "鹏", "华", "飞",
           "鑫", "波", "斌", "宇", "浩", "凯", "健", "俊", "帆", "帅",  "旭", "宁", "龙", "林", "欢", "佳",
           "阳", "建华", "亮", "成", "建", "峰", "建国", "建军", "晨", "瑞", "志强", "兵", "雷", "东", "博",
           "彬", "坤", "想", "岩", "杨",  "文", "利", "楠", "红霞", "建平",
       ]
    
       first_names_female = [
           "芳", "娜", "敏", "静", "秀英", "丽", "艳", "娟", "霞", "秀兰", "燕", "玲", "桂英", "丹", "萍",
           "红", "玉兰", "桂兰", "英", "梅", "莉", "秀珍", "婷", "玉梅", "玉珍", "凤英", "晶", "玉英", "颖",
           "雪", "慧", "红梅", "倩", "琴", "兰英", "畅", "云", "洁", "柳", "淑珍", "春梅", "海燕", "冬梅",
           "秀荣", "桂珍", "莹", "秀云", "桂荣", "秀梅", "丽娟", "婷婷", "玉华", "琳", "雪梅", "淑兰", "丽丽",
           "玉", "秀芳", "欣", "淑英", "桂芳", "丽华", "丹丹", "桂香", "淑华", "荣", "秀华", "桂芝", "小红",
           "金凤", "瑜", "桂花", "璐", "凤兰",
       ]
    
       first_names = first_names_male + first_names_female
       ...
    

    看以看到formats定义了姓名的格式, 属性由一系列样本数据构成, 通过随机方式获取, 格式中的占位符(last_name, first_name)则通过正则表达式完成替换

    相关文章

      网友评论

          本文标题:数据工厂 - Faker

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