上篇文章主要写的是执行单条用例并写入,本篇添加一点优化内容:1、用例条数可控 2、循环执行多条用例并写入结果
优化思路:
1、创建api_test函数,将用例地址和用例条数参数化
def api_test(excelDir, lines):
workbook = xlrd.open_workbook(excelDir, formatting_info=True)
2、读取指定内容,根据用例所属行数(即用例条数)遍历执行(列数是一致的,可以直接给固定值)
#遍历用例行数(从1开始,0为标题栏所以忽略)
for i in range(1, lines):
# 1-3读取指定单元格
celldata = workSheet.cell(i, 5).value
celldata1 = workSheet.cell(i, 3).value
celldata2 = workSheet.cell(i, 6).value
3、将执行结果和所在行拼接成字典(写入结果时要根据行数写入,所以同时 用到两个参数,所以选择了字典格式)
3-1:遍历行数添加到列表
#行数
listline = []
#存放测试结果
result = []
#遍历用例行数(从1开始,0为标题栏所以忽略)
for i in range(1, lines):
listline.append(i)
3-2:执行结果添加到列表
if r.status_code == 200:
print('通过')
# 定义变量记录判断结果,之后用于写入表格
excel_res = 'PASS'
else:
print('失败')
excel_res = 'FALSE'
result.append(excel_res)
3-3:拼接成字典
# 将两个列表拼接成字典
dict_result = dict(zip(listline, result))
4、遍历字典,将结果写入表格内
for i, j in dict_result.items():
wrSheet.write(i, 9, j)
完整代码如下:
import json
import xlrd
import requests
from xlutils.copy import copy # 复制函数
# 自动运行接口测试用例,参数excel:用例地址 lines:用例总行数
def api_test(excelDir, lines):
# 1-读取Excel测试用例
# 1-1:打开Excel
# formatting_info=True :可保留当前表格的格式(行宽,列宽等)。创建表格格式为.xls,否则保存时报错。其他格式要通过另存为改为xls格式,重命名更改无效!!!
workbook = xlrd.open_workbook(excelDir, formatting_info=True)
# 通过角标获取表单:workSheet = workbook.sheet_names()[0]
# 1-2通过表单名获取表单
workSheet = workbook.sheet_by_name("Sheet1")
#行数
listline = []
#存放测试结果
result = []
#遍历用例行数(从1开始,0为标题栏所以忽略)
for i in range(1, lines):
listline.append(i)
# 1-3读取指定单元格
celldata = workSheet.cell(i, 5).value
celldata1 = workSheet.cell(i, 3).value
celldata2 = workSheet.cell(i, 6).value
# 2-构建接口对应请求
url = celldata1
data = json.loads(celldata2) # json.loads('string')字符串格式改为字典格式
headers = json.loads(celldata)
r = requests.get(url, params=data, headers=headers)
# 判断接口返回
if r.status_code == 200:
print('通过')
# 定义变量记录判断结果,之后用于写入表格
excel_res = 'PASS'
else:
print('失败')
excel_res = 'FALSE'
result.append(excel_res)
# 将两个列表拼接成字典
dict_result = dict(zip(listline, result))
# 3-测试结果写入Excel
# 3-1-首先打开Excel(可复用步骤1-1)
# 3-2-复制
workbookWr = copy(workbook)
wrSheet = workbookWr.get_sheet(0)
# 写入单元格(测试结果栏)
for i, j in dict_result.items():
wrSheet.write(i, 9, j)
# 保存用例(保存为新文件)
workbookWr.save(r'E:\\用例2.xls')
# 调用函数
excel = r'E:\\用例.xls'
api_test(excel, 3)