python涉及到excel的测试用例数据封装有几个三方库。比如xlrd、xlutils、xlwt,这3者之间的关系,可以参考文章:https://www.jianshu.com/writer#/notebooks/49816581/notes/85716710
1.封装excel测试用例读取函数
实例一
import xlrd,pprint
#1.打开工作簿,根据路径去打开所在文件路径的工作簿,获取到【workBook 】对象
workBook =xlrd.open_workbook(r'C:\Users\hlhs_cqb\Downloads\test-测试用例V1.2.xls')
#2.从工作簿中,获取【workBook_sheet*】对象
# workBook_sheet1=workBook.get_sheet(1)
workBook_sheet4=workBook.sheets()[1]
workBook_sheet2=workBook.sheet_by_name('test')
workBook_sheet3=workBook.sheet_by_index(0)
#3.获取整行数据,获取行的值或者行数
pprint.pprint(workBook_sheet2.row_values(1))
pprint.pprint(workBook_sheet3.nrows)
pprint.pprint(workBook_sheet4.row_values(1))
2.调用excel执行测试用例
import xlrd,json,time
from xlutils.copy import copy
from lib.caseLib import CaseManage
#1-1 打开Excel,获取【workBook】 对象
workBook=xlrd.open_workbook(r'../../data/test-测试用例.xls',formatting_info=True)
#1-2 从工作簿中,获取【workSheet】对象
workSheet=workBook.sheet_by_index(0)
#2-对象实例化,CaseManage主要是用于对接口的请求。
cam=CaseManage()
cam.login('test','123456')
#3-1 复制一个工作簿
workBookNew=copy(workBook)
#3-2 打开工作表
workSheetNew=workBookNew.sheet_by_name('test')
#1-3 对工作表进行循环
for i in range(1,workSheet.nrows):
# 1-4 循环中得到具体的一行数据
row = workSheet.row_values(i)
#1-5 拿到第1、5、6、7、列的值。
if row[4]=='add':
#获取第五列数据,转换为字典
data=json.loads(row[5])
name=data['name']#从字典中获取用例名称属性
#用例名称的变量,用时间戳替换
name=name.replace('{{caseName}}',str(int(time.time()*1000)))
#调用用例新增接口
dictBody = cm.add(name, data['desc'], data['display_idx'])
test = json.loads(row[6])
if (dictBody["retcode"]==test["code"]):
print(">>>>>测试通过,用例编号:",row[4],row[0])
workSheetNew.write(i,7,'PASS')
else:
print(">>>>>测试不通过,用例编号:",row[4], row[0],dictBody["reason"])
workSheetNew.write(i, 7, 'FAIL')
# workSheetNew.write(i, 8, dictBody['reason'])
elif row[4]=='delete':
data = json.loads(row[5])
dictBody = cm.delete(data['id'])
test = json.loads(row[6])
if (dictBody["retcode"] == test["code"]):
print(">>>>>测试通过,用例编号:",row[4], row[0])
workSheetNew.write(i, 7, 'PASS')
else:
print(">>>>>测试不通过,用例编号:",row[4], row[0])
workSheetNew.write(i, 7, 'FAIL')
elif row[4]=='list':
# 获取第五列数据,转换为字典
data=json.loads(row[5])
#excel中的参数
dictBody=cm.list(data["pagenum"],data["pagesize"])
#获取第七列数据断言
test=json.loads(row[6])
if(dictBody["retcode"]==test["code"]):
print(">>>>>测试通过,用例编号:",row[4], row[0])
workSheetNew.write(i, 7, 'PASS')
else:
print(">>>>>测试不通过,用例编号:",row[4], row[0])
workSheetNew.write(i, 7, 'FAIL')
# workSheetNew.write(i, 8, dictBody['reason'])
elif row[4] == 'modify':
pass
else:
print('未定义:'+row[4])
workBookNew.save(r'../../report/测试结果.xls')