测试造随机数据,玩下Faker模块
前言
在软件需求、开发、测试过程中,有时候需要使用一些测试数据,针对这种情况,我们一般要么使用已有的系统数据,要么需要手动制造一些数据。
在手动制造数据的过程中,可能需要花费大量精力和工作量,现在好了,有一个Python包能够协助你完成这方面的工作。
- 什么是Faker
Faker是一个Python包,开源的GITHUB项目,主要用来创建伪数据,使用Faker包,无需再手动生成或者手写随机数来生成数据,只需要调用Faker提供的方法,即可完成数据的生成。
安装及模块导入
- 安装
pip install faker
- 模块导入
from faker import Faker
基本操作
from faker import Faker
#创建对象,默认生成的数据为为英文,使用zh_CN指定为中文
fake = Faker('zh_CN')
print(fake.name())#随机生成姓名
print(fake.address())#随机生成地址
print(fake.phone_number())#随机生成电话号码
print(fake.pystr())#随机生成字符串
print(fake.email())#随机生成邮箱地址
for i in range(10):
print(fake.name())#随机生成10个姓名
- Faker伪装者更多详细介绍,请点击查看链接
目录结构

- base目录:用于处理目录
- data目录:用于存放数据(如:excel,yaml,ini等等)
- report目录:用于存放测试报告数据
- testcase目录:用于存放测试用例数据
- main整个框架的运行主入口
base_path.py
- 用于封装目录,方便处理不同的文件目录
#! /usr/bin/python3
# @Author : 无涯
from pathlib import Path
import os
class Read_Path():
"""获取文件目录"""
# 绝对路径
BasePath = Path(__file__).resolve().parents[1]
# E:\Back\cm_Faker
# print(Basepath)
def excel_path(self):
"""获取excel表的路径"""
excel_path = Read_Path.BasePath/"data"/"phone.xlsx"
return excel_path
def case_path(self):
"""获取用例目录"""
testcase_path = Read_Path.BasePath/"testcase"
return testcase_path
def report_path(self):
"""获取测试报告目录"""
report_path = Read_Path.BasePath/"report"
return report_path
生成手机数据
- 第1步:生成指定数量随机手机号
- 将手机号写入excel
#! /usr/bin/python3
# @Author : 无涯
from openpyxl import Workbook
from faker import Faker
from base.base_path import Read_Path
import unittest
class Great_Data(unittest.TestCase):
"""随机生成手机号码"""
def setUp(self) -> None:
# 创建对象
self.book = Workbook()
self.sheet = self.book.active
def test_great(self):
# 设置标题
title_data = ["姓名", "电话"]
self.sheet.append(title_data)
# 模拟生成数据
faker = Faker(locale="zh_CN")
for i in range(10):
self.sheet.append([faker.name(), faker.phone_number()])
# 保存操作
self.book.save(Read_Path().excel_path())
验证手机数据
- 读取excel数据
- 循环读取手机号进行检查
#! /usr/bin/python3
# @Author : 无涯
from openpyxl import load_workbook
from base.base_path import Read_Path
from phone import Phone
import logging
import unittest
class Read_Data(unittest.TestCase):
def setUp(self) -> None:
self.excel = load_workbook(Read_Path().excel_path())
self.table = self.excel['Sheet'] #通过表名获取
self.rows = self.table.max_row
self.cols = self.table.max_column
# 获取行数和列数 51,2
def test_phone(self):
"""检查手机号是否真实有效"""
for i in range(1, self.rows):
phone_num = self.table.cell(row=i+1, column=self.cols).value
# print(phone_num)
info = Phone().find(phone_num)
print(info)
if info == None:
pass
else:
logging.warning("手机号:{}, 归属地是:{}".format(info["phone"], info["phone_type"]))
return list
main主文件运行入口
#! /usr/bin/python3
# @Author : 无涯
import unittest
import HTMLTestRunner
import time
from base.base_path import Read_Path
# 测试用例路径
case_path = Read_Path().case_path()
print(case_path)
# 定义测试报告存放路径
report_path = Read_Path().report_path()
def case():
discover = unittest.defaultTestLoader.discover(case_path,
pattern="test_*.py")
return discover
if __name__ == '__main__':
# html报告文件路径
now = time.strftime("%Y-%m-%d %H-%M-%S")
print(now)
report_abspath = Read_Path().report_path()/(now + " result.html")
print(report_abspath)
with open(report_abspath, "wb")as file:
runner = HTMLTestRunner.HTMLTestRunner(stream=file,
title='测试报告',
description='测试用例详情')
# 调用case函数返回值
runner.run(case())
如果想学习软件测试,就快加入:893694563,群内学软件测试,分享技术和学习资料,陪你一起成长和学习。
















