Python读取Excel表格中的接口数据并发送请求
1.读取Excel表中的数据
2.提取测试用例
3.发送接口请求
4.接口响应结果
1 import xlrd 2 import ast 3 import json 4 import requests 5 6 def excel_to_list(data_file, sheet): 7 ''' 8 一次获取工作表中的所有数据 9 :param data_file: Excel文件名 10 :param sheet: 工作簿名 11 :return: 数据表 12 ''' 13 data_list = [] # 新建个空列表,来乘装所有的数据 14 wb = xlrd.open_workbook(data_file) # 打开excel 15 sh = wb.sheet_by_name(sheet) # 获取工作簿 16 header = sh.row_values(0) # 获取标题行数据 17 for i in range(1, sh.nrows): # 跳过标题行,从第二行开始取数据 18 d = dict(zip(header, sh.row_values(i)))# 将标题和每行数据组装成字典 19 data_list.append(d) 20 #logger.info(f"\n全部用例数据:{data_list}\n") 21 return data_list # 列表嵌套字典格式,每个元素是一个字典 22 23 def get_test_data(data_file, sheet, case_name): 24 ''' 25 从用例工作簿数据中提取用例数据 26 :param data_list: 工作簿中表中所有用例数据 27 :param case_name: 用例名字 28 :return: 用例数据 29 ''' 30 data_list = excel_to_list(data_file, sheet) 31 for case_data in data_list: 32 if case_name == case_data['case_name']: # 如果字典数据中case_name与参数一致 33 #logger.info(f"\nexcel中读取用例数据:\n{case_data}") 34 #logger.info(case_data['headers']) 35 return case_data 36 37 def send_request(case_data, case_name): 38 if not case_data: # 有可能为None 39 # 从字典中取数据,excel中的标题也必须是小写url 40 print("用例数据不存在") 41 url = case_data.get('url') # 从字典中取数据,excel中的标题也必须是小写url 42 data = case_data.get('data') # 注意字符串格式 43 headers = case_data.get('headers') 44 expect_res = case_data.get('expect_res') # 期望数据 45 method = case_data.get('method') 46 if method == "GET": 47 res = requests.get(url=url, data=None, headers=None) # 表单请求,数据转为字典格式 48 res_j = res.json() 49 print(f"用例名称:{case_name}\n" 50 f"请求URL:{url}\n" 51 f"请求数据:{data}\n" 52 f"实际结果:{res_j}\n" 53 f"期望结果:{expect_res}\n") 54 return res 55 else: 56 headers = ast.literal_eval(headers) 57 data = json.dumps(ast.literal_eval(data)) 58 res = requests.post(url=url, headers=headers, data=data) 59 res_j = res.json() 60 print(f"用例名称:{case_name}\n" 61 f"请求URL:{url}\n" 62 f"请求数据:{data}\n" 63 f"实际结果:{res_j}\n" 64 f"期望结果:{expect_res}\n") 65 return res 66 67 68 def get_response(data_file, sheet, case_name): 69 case_data = get_test_data(data_file, sheet, case_name) 70 res = send_request(case_data, case_name) 71 return res 72 73 if __name__ == '__main__': 74 data_file = "test_user_data.xls" 75 sheet = "TestUserLogin" 76 get_response(data_file, sheet, "test_getstock_normal") 77 get_response(data_file, sheet, "test_user_login_password")