网店推广新思维苏州seo招聘
Excel数据驱动(handle_excel)
实现逻辑:
通过load_workbook
加载Excel,用iter_rows
逐行读取数据,将表头和用例数据用zip
+dict
组合成字典列表,实现测试数据与代码解耦,支持多Sheet管理。关键函数:
load_workbook()
:加载Excel文件iter_rows(values_only=True)
:按行读取数据dict(zip())
:将表头与数据映射为字典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_phone)
- 封装Faker生成器与数据库查询,通过`phone_number()`生成随机号+`SELECT`校验注册状态,循环获取有效未注册手机号,解决测试数据动态生成问题。
**实现逻辑:**
1. 使用Faker库生成随机中文手机号
2. 通过SQL查询校验手机号是否已注册
3. 循环生成直到获取未注册的有效手机号**关键函数:**
- `Faker().phone_number()`:生成虚拟手机号
- `__check_phone()`:私有方法执行数据库校验
- `get_phone()`:主方法实现生成→校验→返回的闭环逻辑**解决的问题:**
1. 自动化生成未注册的测试手机号
2. 避免测试数据重复导致的用例失败
3. 动态生成测试数据替代硬编码from faker import Faker from tools.handle_db import mysqlclass HandlePhone:def __init__(self):self.fk = Faker(locale="zh-cn")def __check_phone(self,phone):sql = "SELECT * FROM 表名 WHERE user_mobile = '{}'".format(phone)#去数据库查询是否注册,注册了再重新生成,直到在数据库中找不到,就表示未注册;result = mysql.get_datas(sql=sql)return resultdef get_phone(self):while True:#生成新的手机号phone = self.fk.phone_number()# 去数据库校验是否已注册result = self.__check_phone(phone=phone)if len(result)>0:#手机号已存在,需要重新生成手机号continueelse:return phone
全局配置管理(setting.py)
- 通过字典结构分类存储数据库连接、用户凭证、文件参数等配置项,实现配置数据与测试代码解耦,解决多环境参数硬编码维护难题。
- **实现逻辑:**
- 集中管理测试环境配置参数
- 采用字典结构分类存储不同功能模块配置
- 实现配置数据与业务代码分离
- **关键配置项:**
- - `user_info`:系统登录凭证
- - `mysql_info`:数据库连接四要素
- - `image_info`:文件上传参数
- - `assert_db_info`:动态路径断言参数
- - `setup_sql_info`:前置SQL变量替换值
#setting.py 用于存放当前框架中的所有配置信息(使用不频繁,修改不频繁的数据) #通过配置文件传参-软编码;在代码中写死-硬编码;#管理者登陆账号信息 user_info = {"user_name":"xdfjewg","password":"dfergbu"}#图片上传信息 image_info = {"file_name":"song.png","file_type":"image/png"}#连接数据库信息 mysql_info = {"host":"11.111.111.11","post":"3306","user":"lemon","password":"vdnjkvs","db":"fsegjvskjv"}#数据库断言替换信息,如"file_path":"2022/04/cd54sdgruissafmscsd/vds"图片上传路径 assert_db_info = {}#前置sql语句执行需要替换的参数 setup_sql_info = {}