1.优化内容:
当用户需要仅执行测试用例里面指定的某一条或某几条用例运行时
具体方案:(用例筛选)
(1)全部执行
(2)分段执行 用例01-用例07
(3)随机执行某一个 用例03
(4)混和模式[用例01,用例03-用例07,用例09]
"""
函数名:def get_excel_data()
版本:v3.0
函数功能:
(1)获取请求的body与预期的响应结果
(2)可以自定义获取对应的列数据
(3)需要获取测试用例里面指定的某几条用例运行
具体方案:(用例筛选)(1)全部执行(2)分段执行 用例01-用例07(3)随机执行某一个 用例03(4)混和模式[用例01,用例03-用例07,用例09]
框架层Pytest只能定制化执行接口层-跑某一个接口,或不跑 某一个接口
但是:具体的测试用例的挑选,框架做不了
pytest框架:靠一个数据驱动的装饰器执行 @pytest.mark.paramzied(excel挑选出来的用例)"""
# --------------- v3.0 --------------
import xlrd# 可变数量参数*args(可以传多个参数),元组形式
#selectCase=['all'],如果不指定,就默认全部执行
#caseName参数:用例编号
def get_excel_data(excelDir, sheetName, caseName,*colName,selectCase=['all']):resList=[]# formatting_info 保持原样式workBook = xlrd.open_workbook(excelDir, formatting_info=True)workSheet = workBook.sheet_names() # 获取所有表名# 获取具体的表(模块)workSheet = workBook.sheet_by_name(sheetName)"""函数调用者使用列名:标题,url代码真正操作:使用列的编号思路转化:把函数调用者输入的列名转为列编号"""
# --------------指定列名----------------------colIdxList = []#函数调用者输入列名,转化后的列编号-用列表存放for i in colName:#遍历用户输入的列名colName是元组num=workSheet.row_values(0).index(i)#取出第0行,然后按值求下边(列表求下标)colIdxList.append(num)print('列编号--',colIdxList)# ————————————————————————————————————"""函数调用者指定某一条或某一段用例编号"""# ---------------挑选用例执行---------------------selectList=[]if 'all' in selectCase:#全部执行,一整列数据col_values(0)selectList=workSheet.col_values(0)else:# 1.某一个 2.某一段for one in selectCase:if '-' in one:#是-,代表执行一段.需要切割['03-06]start,end=one.split('-')# 03 06for i in range(int(start),int(end)+1):#3,7# {i:>03}保证3位,不够补0.# 拼接用例编号-接口名+编号==Login3---Login003selectList.append(caseName+f'{i:0>3}')else:selectList.append(caseName+f'{one:0>3}')
# ————————————————————————————————————# 获取数idx = 0 #代表行号初始值for one in workSheet.col_values(0):#获取第0列数据if caseName in one and one in selectList:# 条件满足,则需要这以后数据中的对应列getColData = []# 存放一行中对应的多列数据for colIdx in colIdxList:#遍历列名转化后的列编号,拿到所有需要的列(colIdx)res = workSheet.cell_value(idx,colIdx)#读取某一个单元格数据getColData.append((res))resList.append(getColData)idx+=1return resListif __name__ == '__main__':configData=['用例编号','标题','url']#代码的装包和解包#*configData--将元组、列表解成单个元素res=get_excel_data('../data/Delivery.xls', '登录模块','Login',*configData,selectCase=['001','003-004'])print(res)for one in res:print(one)
"""
测试反馈:
1.如果是普通字符串-不需要转化
2.如果是json字符串-需要转为字典,因为后续接口需要子弟啊格式
建议:需要转化json字符串的形式
"""