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")

 

posted @ 2022-03-04 14:29  chloe_qq  阅读(669)  评论(0编辑  收藏  举报