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 06
for i in range(int(start),int(end)+1):#3,7
# {i:>03}保证3位,不够补0.
# 拼接用例编号-接口名+编号==Login3---Login003
selectList.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+=1
return resList
if __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字符串的形式
"""