接口自动化测试框架
工具层(tools)
路径管理工具handle_path
- 该文档定义了项目关键路径配置脚本,通过
os
和time
库动态生成项目根目录、测试数据路径、图片路径、测试报告目录等核心路径,并创建时间戳格式的测试报告名称。
os:操作系统交互库,用于路径操作
os.path.dirname()
:获取父目录路径
os.path.join()
:智能拼接路径
os.path.abspath(__file__)
:获取当前文件的绝对路径
time:时间处理库
time.strftime()
:格式化时间戳
time.localtime()
:获取本地时间import osimport time#项目根目录,其中os.path处理文件和目录路径,dirname返回路径的目录部分,不包含文件名;abspath返回指定文件绝对路径;__file__当前执行文件; base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#日志目录 log_name = time.strftime("%Y%m%d",time.localtime()) log_dir_name = os.path.join(base_dir,"logs",f"{log_name}.log")#测试数据的路径,join拼接多个路径,生成完整路径; data_dir = os.path.join(base_dir,"test_data","case_data.xlsx")#图片地址 image_dir = os.path.join(base_dir,"images","song.png")#测试用例文件目录 case_dir = os.path.join(base_dir,"test_cases")#测试报告名称 report_name = time.strftime("%Y%m%d_%H%M%S",time.localtime())#测试报告目录 report_dir = os.path.join(base_dir,"reports")#历史报告目录 history_report_dir = os.path.join(base_dir,"reports","history")
excel测试用例读取工具handle_excel
- 定义了一个名为
HandleExcel
的类,提供加载 Excel 文件、读取指定 sheet 页的测试用例数据(返回字典列表)、关闭文件的方法。
openpyxl:
load_workbook
:加载 Excel 工作簿
iter_rows(values_only=True)
:读取单元格数据(直接获取值而非单元格对象)
__init__(self, file_name):
初始化方法:加载 Excel 文件,获取所有 sheet 名称列表-
get_excel_test_cases(self, sheet_name)
根据 sheet 名称获取工作表对象:
sheet_obj = self.wb_obj[sheet_name]
读取表头和数据行:
datas = list(sheet_obj.iter_rows(values_only=True))
返回字典列表格式的测试用例数据
将每行数据与表头组合成字典:
dict(zip(case_title, case))
close_file(self)
:关闭 Excel 文件:self.wb_obj.close()
模块/类 方法/属性 使用场景描述 openpyxl
load_workbook()
加载指定的 Excel 文件,返回一个 Workbook
对象。Workbook
对象.sheetnames
(属性)获取 Excel 文件中所有 Sheet 的名称列表。 [sheet_name]
(通过键访问)根据 Sheet 名称获取对应的 Worksheet
对象。.iter_rows(values_only=True)
按行迭代 Sheet 中的数据, values_only=True
表示返回单元格的实际值。.close()
关闭 Excel 文件,释放资源。 Python 内置函数 list()
将迭代器(如 iter_rows
的结果)转换为列表。zip()
将表头和数据按列组合,生成键值对。 dict()
将 zip
生成的键值对转换为字典,形成单条用例数据。list
对象.append()
将单条用例数据(字典)追加到结果列表中。
from openpyxl import load_workbookclass HandleExcel:def __init__(self,file_name): #file_name: 测试用例文件名称(绝对路径)self.wb_obj = load_workbook(filename=file_name) #load_workbook加载excel#获取所有excel中sheet的名称self.sheet_names = self.wb_obj.sheetnamesdef get_excel_test_cases(self,sheet_name): #sheet_name: excel中sheet名称#临时变量存放数据cases_list = [] #获取指定表单对象sheet_obj = self.wb_obj[sheet_name]#iter_rows迭代所有行数据,按行读取封装成list输出结果类似于[('id','title'),(1,'登陆成功')],values_only是False返回对象,True返回单元格对应数据,datas获取表单sheet中所有数据datas = list(sheet_obj.iter_rows(values_only=True))#获取表头case_title = datas[0] #获取表数据case_datas = datas[1:] #遍历每一行数据for case in case_datas:#zip(key,val)把两个元素压缩在一起,再把每一行数据使用dict转换成字典类型,zip函数是python的内置函数result = dict(zip(case_title,case))cases_list.append(result)self.close_file()return cases_listdef close_file(self):#关闭excelself.wb_obj.close() if __name__ == '__main__':#存放excel测试数据的文件名(放本目录下的路径)cl = HandleExcel(file_name="case_data.xlsx",sheet_name="login")cl.get_excel_test_cases()
全局属性管理器handle_attribute
全局属性管理器,存储接口返回的全局变量
class HandleAttr:pass
手机号生成工具handle_phone
-
定义了一个名为
HandlePhone
的类,提供生成随机手机号并通过数据库查询验证其唯一性(确保未注册)的方法。
Faker
:用于生成随机手机号通过
tools.handle_db.mysql
模块操作数据库(执行 SQL 查询)
__init__(self)
: 初始化一个Faker对象
__check_phone(self, phone)
: 私有方法,用于检查手机号是否已存在于数据库的用户表中
get_phone(self)
: 使用Faker库循环生成随机手机号,直到生成一个数据库中不存在的手机号,然后返回from faker import Faker from tools.handle_db import mysqlclass HandlePhone:def __init__(self):self.fk