测试开发技术:如何高效生成多样化测试数据以提升软件质量
[id_1[id_1166242692]59787213]

优质文章,第一时间送达!
1. 背景
在软件的需求、开发以及测试过程里,有时会用到一些测试数据。面对这种情形,我们通常要么运用已有的系统数据,要么得手动去制造一些数据。因为当下的业务系统数据具备多种类型,且变化多端。手动制造数据时,可能需要耗费大量的精力和工作量。这项工作既繁杂又容易出错,例如要构建一批用户的三要素,即姓名、手机号、身份证;要构建一批银行卡数据;或者要构建一批地址通讯录等。
这时候,人们常常为图偷懒快捷,所测试的数据大多可能是类似这样的:
测试, 1300000 000123456
张三, 1310000 000123456
李四, 1320000 000234567
王五, 1330000 000345678
测试数据包含了诸多“测试 XX”,有的是随意在键盘上胡乱敲击产生的,这些都是没有意义的假数据。
你是否做过这样的事呢?坦率地讲,曾经有那么一段时间,我偶尔也会有这样的行为。
但是细想的话,这样的测试数据,一方面需要自己手动去敲击;另一方面,这些数据假得非常明显,简直是假到不能再假了。并且,这样做既浪费时间,又浪费人力,同时数据的价值还很低。
而且,部分数据的手工制造存在无法保障的情况。例如 UUID 类数据,还有 MD5、SHA 加密类数据等。
为了帮大家解决此问题,更多时候是提供一种解决方案或思路。今天给大家分享一款 Python 造数据的利器,即 Faker 库。利用它能够生成一批各式各样的、看起来“像真的一样”的假数据。
2. Faker介绍 、安装2.1 Faker是什么
Faker 是一个用于创建伪数据的 Python 包。使用 Faker 包的话,就不需要再通过手动生成或者手写随机数来生成数据了。只需调用 Faker 所提供的方法,就能够完成数据的生成。
项目地址:
https://github.com/joke2k/faker
2.2 安装
安装 Faker 很简单,使用 pip 方式安装:
pip install Faker
可以通过上方提供的 github 地址来下载编译安装,同时也可以进行 pip 安装。
使用 py3_env 环境下的 pip 来显示 faker 的相关信息。
Name: Faker
Version: 4.1.1
[id_1427200604]is一个能够生成虚假数据的 Python 包。for you.
Author: joke2k
作者的邮箱是:joke2k@gmail.com。
License: MIT License
位置在 /Users/xxx/work_env/py3_env/lib/python3 。.7/site-packages
需要:python-dateutil 以及 text-unidecode
Required-by:
3. Faker常用使用3.1 基本用法
使用 Faker 是很简单的。首先从 faker 模块中导入类,接着对这个类进行实例化,之后就能够调用方法来使用它了。
from faker import Faker
fake = Faker()
name = fake.name()
address = fake.address()
print(name)
print(address)
# 输出信息
Ashley Love
074 Lee Village Suite 464
Dawnborough, RI 44234
我们在此创造了一个名字和一个地址。因为 Faker 通常是英文数据,所以倘若我们需要创造其他语言的数据,就可以运用 locale 参数,例如:
from faker import Faker
fake = Faker(locale='zh_CN')
name = fake.name()
address = fake.address()
print(name)
print(address)
# 输出信息
张艳
海南省上海市朝阳邱路y座 175208
看起来还不错,不过有一点需注意。这里的地址并非真实地址,而是随机组合而成的,即把省、市、道路等随机组合在一起。
这里介绍几个比较常见的语言代号:
语言修改为繁体中文时,可使用 Faker 类并设置 locale 为 'zh_TW',即 fake = Faker(locale='zh_TW')。
楊志宏
100 中壢博愛街10號9樓
3.2 常用函数
除了上述提及的生成姓名的 fake.name 函数和生成地址的 fake.address 函数之外,常用的 faker 函数按照类别来划分,有如下一些常用的方法。
1、地理信息类
2、基础信息类
3、计算机基础、Internet信息类
4、网络基础信息类
5、浏览器信息类
6、数字类
7、文本、加密类
8、时间信息类
9、python 相关方法
可以使用 dir(fake) 来查看 Faker 库能够 fake 哪些数据。目前 Faker 支持将近 300 种数据。并且它还支持自行进行扩展。
有了这些生成数据的函数之后,通过 fake 对象就能够调用不同的方法来生成各种数据。
3.3 常用数据场景
1、构造通讯录记录
from faker import Faker
fake = Faker(locale='zh_CN')
for _ in range(5):
print('姓名:', fake.name(), ' 手机号:', fake.phone_number())
# 输出信息:
姓名: 骆柳 手机号: 18674751460
姓名: 薛利 手机号: 13046558454
姓名: 翟丽丽 手机号: 15254904803
姓名: 宋秀珍 手机号: 13347585045
姓名: 孔桂珍 手机号: 18258911504
2、构造信用卡数据
from faker import Faker
fake = Faker(locale='zh_CN')
print('Card Number:'fake.credit_card_number 的参数 card_type 为 None 时,用于生成虚假的信用卡号码。
print('Card Provider:'fake.credit_card_provider 且 card_type 为 None
print('Card Security Code:'fake.credit_card_security_code 的参数 card_type 为 None 。
print('Card Expire:', fake.credit_card_expire())
# 输出信息:
Card Number: 676181530350
Card Security Code: 615
Card Expire: 09/21
3、生成个人档案信息
from faker import Faker
fake = Faker(locale='zh_CN')
print(fake.profile())
# 输出信息
{'job': '美术指导', 'company': '易动力传媒有限公司', 'ssn': '370703197807179500', 'residence': '广西壮族自治区旭县蓟州东莞街L座 784064', 'current_location': (Decimal('78.3608745'), Decimal('-95.946407')), [id_1507201425]: 'B+', 'website': ['https://www.jiewang.org/', 'https://www.longsong.cn/', 'https://jingyong.net/', 'https://58.cn/'], 'username': 'qinqiang', 'name': '唐伟', 'sex': 'F', 'address': '新疆维吾尔自治区建华市东丽拉萨街a座 875743', 'mail': 'shenyang@hotmail.com', 'birthdate': datetime.date(2014, 4, 27)}
4、生成Python相关结构信息
from faker import Faker
fake = Faker(locale='zh_CN')
print('生成Python字典: {}'.format(fake.pydict(
nb_elements=10, variable_nb_elements=True))) # Python字典
print('生成Python可迭代对象:{}.'.format(fake.pyiterable(
nb_elements=10, variable_nb_elements=True))) # Python可迭代对象
print('生成Python结构:{}'.format(fake.pystruct(count=1))) # Python结构
# 输出信息
成Python字典: {'论坛': 'nVcSbHlrcrhIBtwByVUM', '直接': 'drkyFUNcNxdbwYKhRLEZ', '成功': “https://fang.cn/main/search/blog/search/”这个链接用于搜索相关内容。它指向一个特定的搜索页面,在该页面可以进行关于博客的搜索操作。通过这个链接,用户能够启动搜索功能,以查找符合特定条件的博客信息。, '没有': datetime.datetime(2006, 2, 24, 15, 40, 14), '原因': 404, '作者': 'OTJjsFHQklpUvTPtLCqP'}
生成Python可迭代对象:{1088, 'ignqbohwYRxqolLEzSti', 'http://gang.cn/main/search.php' 这个链接是一个特定的地址,用于在该网站的主页面进行搜索相关操作。它指向了一个专门处理搜索请求的页面,通过这个页面可以输入关键词等信息来查找所需的内容。, 'zRnNYdIpPXUxEVISHbvS', 'ToZxuBetghvlPHUumAvi', 9830, 'OYAjoKeVNGhHMLgnYUAw', 970446.888, -17681479853.4069, 872236250787063.0, datetime.datetime(2017, 12, 24, 5, 58, 58), 'aRSfxiUSuMqHXvKCCkMJ'}
生成Python结构:(['cKwOvdCEFOhCERMSMXSf'], {'只有': 'hhwGCmjkHMOUjBTDztXp'}, {'还有': {0: 'vjcNqpnRbNUUxXpgVyvh', 1: [8725, 7125, 'aTSJssAJUKpuRLcbiwyK'], 2: {0: 'RmWlFQQpVZIQkxZPfJnq', 1: 'efsUVLgeStXbCOJDuJCf', 2: ['FgZQLCRjUTmEbBdDMEPZ', 'https://min.cn/search/faq/']}}})
4. 自定义Faker数据类型
如果这些数据不足以用于生成数据,那么 Faker 能够支持创建由自定义的 Provider 来生成数据。
from faker import Faker
from faker.providers import BaseProvider
# 创建自定义Provider
class CustomProvider(BaseProvider):
def customize_type(self):
return 'test_Faker_customize_type'
# 添加Provider
fake = Faker()
添加一个提供器 CustomProvider 到 fake 中。
print(fake.customize_type())
十分简单,以后可以自己创建用于常用数据的 Provider,通过自动化的方法生成。这样不仅节省了时间,复用性也变高了。
5. 总结
这些是一些常见的数据。Faker 能够制造的数据类型远超过这些。相信经过本文的介绍,大家对 Faker 应该不会感到陌生了。
此外,Faker 是一个开源的库。它的源码非常值得研究。同时,对于 Python 新手来说,它也是可以用来练习开源项目的利器。
如果觉得有用,帮忙点个好看或朋友圈转发分享一下就行。
作者新书
新书有相关资讯。新书除了有纸质图书之外,它的电子版也已经在京东以及当当网上线了。
(点击直达小程序)