本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/23047
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头 |