数据工厂 - Faker

2019-04-17  本文已影响0人  halfempty

前言

无论是性能测试, 还是大数据的测试, 甚至基本的功能测试, 造数据都是一件棘手的事
抛开数据间的关联关系不谈, 各种类型的数据长短不一, 格式不一, 单纯的复制粘贴不利于识别, 也不符合一般的数据场景
有幸得知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

我们看一下如何生成姓名

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)
    ....
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)则通过正则表达式完成替换

上一篇下一篇

猜你喜欢

热点阅读