软件测试学习笔记丨Python Faker库造伪数据,使用CSV文件数据管理,faker数据唯一性

117 阅读5分钟

本文转自测试人社区,原文链接:ceshiren.com/t/topic/230…

Python Faker库造伪数据,使用CSV文件进行数据驱动管理

一、Faker概述

Python在数据使用方面有举足轻重的地位,也越来越多的使用在自动化测试等方向。
在测试过程中,必不可少会经历造数据,数据驱动(DDT)测试的环节。
Python的第三方库Faker可以很好的帮我们处理相关问题场景。

二、安装及基本使用

  • 安装
# 因为是第三方库,可以直接使用pip进行安装
>>>pip install Faker -i https://pypi.tuna.tsinghua.edu.cn/simple

显示上述图示结果,即安装成功

  • 基本API的使用-----No bb, show me the code.
>>> from faker import Faker
>>> f=Faker("zh-CN")
>>> f.name()
'尹强'
>>> f.phone_number()
'15094652820'
>>> f.email()
'minguo@dai.cn'
>>> f.ssn()
'430525196611276981'
>>>

基本的调用方法就是这样,生成一个Faker实例对象,通过.方法()的调用输出想要的数据。

Faker的api接口很多很多,相关的接口写在最下方。

三、批量生成数据,使用CSV文件管理

在测试工作中,经常会将测试用数据统一管理起来,比如在Jmeter中常使用的就是CSV文件。

eg.

from faker import Faker


class FakerDemo:
    def __init__(self):
        # 实例化时,如果要生成中国的数据信息,参数内要加上"zh-CN"
        self.fake = Faker("zh-CN")

    def person(self, count):
        msg = ""
        for i in range(count):
            num = i + 1
            name = self.fake.name()
            phone = self.fake.phone_number()
            email = self.fake.email()
            msg += f"{num},{name},{phone},{email}\n"
        return msg


if __name__ == '__main__':
    #实例化FakeDemor对象
    f = FakerDemo()
    #生成10个人的信息(序号,姓名,电话,邮编)
    data = f.person(10)
    #print(data)

    with open("data.csv", "w") as d:
        d.write(data)

以上代码运行后,则会在当前目录生成一个data.csv文件。如下图所示

具体要生成哪些数据,则自己把握

四、数据唯一性问题

那我们需要确定一个问题,Faker生成的数据是具有唯一性的吗?我们可以通过一小段代码来验证一下。

No bb, show me the code.

from faker import Faker


def faker_demo(n):
    f = Faker("zh-CN")
    l = []
    for i in range(n):
        name = f.name()
        l.append(name)
    return f"列表总数{len(l)},去重后总数{len(set(l))}"


if __name__ == '__main__':
    print(faker_demo(100))

经过调用显示结果如下:

100条数据:

1000条数据:

10000条数据:

由此可知,faker普通接口生成的数据,并不是具有唯一性的。

所以大家在使用中,如果是需要唯一性数据,需要更改一处代码:name = f.unique.name()

# 在生成数据时,先调用unique,上面例子中的代码则改成下面这样
from faker import Faker


def faker_demo(n):
    f = Faker("zh-CN")
    l = []
    for i in range(n):
        # 代码更改处,调用数据时,先调用unique
        name = f.unique.name()
        l.append(name)
    return f"列表总数{len(l)},去重后总数{len(set(l))}"


if __name__ == '__main__':
    print(faker_demo(10000))

生成10000条数据,验证一下:

这样,就不用自己再去写逻辑筛除,可以非常方便的生成唯一性数据了。

五、相关API

数据的生成均为实例化Faker对象后通过.方法()进行调用,下表为平时最常用相关API,不常用的API太多,网上到处都是,我也懒得贴了,大家可以自行百度查找。

API含义
name()生成姓名
phone_number()生成11位手机号
email()生成电子邮件
address()生成地址
ssn(min_age=18,max_age=100)生成身份证号(最小年龄,最大年龄)
text(max_nb_chars=100)生成一段100字符的假文
user_agent()生成一个随机user_agent头

推荐学习

【霍格沃兹测试开发】7天软件测试快速入门带你从零基础/转行/小白/就业/测试用例设计实战

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (上集)

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (下集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(上集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(下集)

【霍格沃兹测试开发】精品课合集/ 自动化测试/ 性能测试/ 精准测试/ 测试左移/ 测试右移/ 人工智能测试

【霍格沃兹测试开发】腾讯/ 百度/ 阿里/ 字节测试专家技术沙龙分享合集/ 精准化测试/ 流量回放/Diff

【霍格沃兹测试开发】Pytest 用例结构/ 编写规范 / 免费分享

【霍格沃兹测试开发】JMeter 实时性能监控平台/ 数据分析展示系统Grafana/Docker 安装

【霍格沃兹测试开发】接口自动化测试的场景有哪些?为什么要做接口自动化测试?如何一键生成测试报告?

【霍格沃兹测试开发】面试技巧指导/ 测试开发能力评级/1V1 模拟面试实战/ 冲刺年薪百万!

【霍格沃兹测试开发】腾讯软件测试能力评级标准/ 要评级表格的联系我

【霍格沃兹测试开发】Pytest 与Allure2 一键生成测试报告/ 测试用例断言/ 数据驱动/ 参数化

【霍格沃兹测试开发】App 功能测试实战快速入门/adb 常用命令/adb 压力测试

【霍格沃兹测试开发】阿里/ 百度/ 腾讯/ 滴滴/ 字节/ 一线大厂面试真题讲解,卷完拿高薪Offer !

【霍格沃兹测试开发】App自动化测试零基础快速入门/Appium/自动化用例录制/参数配置

【霍格沃兹测试开发】如何用Postman 做接口测试,从入门到实战/ 接口抓包(最新最全教程)