背景:使用Excel实现接口自动化,将请求参数存放与Excel中,并将接口执行结果反写到表格中
一、了解openpyxl
Openpyxl是一个用于处理Excel文件的Python库。它允许您使用Python创建、读取和修改Excel文件。Openpyxl支持Excel 2010及以后版本,包括xlsx文件格式。不支持xls文件
二、Excel数据格式
文件定义了以下字段,格式如下图所示:
service:服务端
request_method:请求方式
router:请求地址
data:请求参数
asserts:断言
results:断言结果
response:响应信息
三、代码实现逻辑(request+pytest+openpyxl)
import pytest
from openpyxl import load_workbook
def read_data():
"""
@description : 读取Excel表中数据
---------
@param :
-------
@Returns : 返回Excel中测试数据,列表形式
-------
"""
workbook = load_workbook("testcase/test_data.xlsx") # 加载工作簿
sheet = workbook['测试用例'] # 加载工作表
data = []
# 遍历指定行范围的值,以及行数row_now
for row_num, row in enumerate (sheet.iter_rows(min_row=2, values_only=True),start=2):
test_case = {
"row_num": row_num,
"service": row[0],
"request_method": row[1],
"router": row[2],
"data": row[3],
"asserts": row[4],
"expected_result": row[5],
"results": row[6],
"response": row[7]
}
data.append(test_case)
return data
def send_request(test_case):
"""
@description : 发送请求信息
---------
@param test_case : 测试用例数据(存放与Excel中)
-------
@Returns : response
-------
"""
from utils.common_request import CommonRequest
cr = CommonRequest(test_case['service'])
if test_case['request_method'] == 'GET':
response = cr.send_main(method=test_case['request_method'], router=test_case['router'], params=eval(test_case['data']))
else:
response = cr.send_main(method=test_case['request_method'], router=test_case['router'], json_data=eval(test_case['data']))
return response
@pytest.mark.parametrize("test_case", read_data())
def test_api(test_case):
"""
@description : 执行测试用例,并将测试结果以及响应信息,反写至Excel文件
---------
@param test_case: 测试用例数据(存放与Excel中)
-------
"""
response = send_request(test_case)
result = response.json()
# 判断实际结果与预期结果是否一致
test_case['results'] = 'Pass' if eval(test_case['asserts']) == test_case['expected_result'] else 'Fail' # eval()函数,将字符串作为
test_case['response'] = response.text # 将返回数据转换为str类型
workbook = load_workbook("testcase/test_data.xlsx") # 加载工作簿
sheet = workbook.active # 加载工作表
sheet.cell(row=test_case['row_num'], column=7, value=test_case['results'])
sheet.cell(row=test_case['row_num'], column=8, value=test_case['response'])
workbook.save("testcase/test_data.xlsx") # 保存工作簿
assert eval(test_case['asserts']) == test_case['expected_result']
四、执行结果