Python+requests+unittest+excel实现接口自动化测试框架(摘录)
Posted 杨艳的技术归档
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python+requests+unittest+excel实现接口自动化测试框架(摘录)相关的知识,希望对你有一定的参考价值。
一、框架结构:
工程目录
二、Case文件设计
三、基础包 base
3.1 封装get/post请求(runmethon.py)
1 import requests 2 import json 3 class RunMethod: 4 def post_main(self,url,data,header=None): 5 res = None 6 if header !=None: 7 res = requests.post(url=url,data=data,headers=header) 8 else: 9 res = requests.post(url=url,data=data) 10 return res.json() 11 12 def get_main(self,url,data=None,header=None): 13 res = None 14 if header !=None: 15 res = requests.get(url=url,data=data,headers=header,verify=False) 16 else: 17 res = requests.get(url=url,data=data,verify=False) 18 return res.json() 19 20 def run_main(self,method,url,data=None,header=None): 21 res = None 22 if method == \'Post\': 23 res = self.post_main(url,data,header) 24 else: 25 res = self.get_main(url,data,header) 26 return json.dumps(res,ensure_ascii=False,sort_keys=True,indent=2)
3.2 封装mock(mock.py)
1 from mock import mock 2 #模拟mock 封装 3 def mock_test(mock_method,request_data,url,method,response_data): 4 mock_method = mock.Mock(return_value=response_data) 5 res = mock_method(url,method,request_data) 6 return res
四、数据操作包 operation_data
4.1 获取excel单元格中的内容(get_data.py)
1 #coding:utf-8 2 from tool.operation_excel import OperationExcel 3 import data_config 4 from tool.operation_json import OperetionJson 5 from tool.connect_db import OperationMysql 6 class GetData: 7 def __init__(self): 8 self.opera_excel = OperationExcel() 9 10 #去获取excel行数,就是case的个数 11 def get_case_lines(self): 12 return self.opera_excel.get_lines() 13 14 #获取是否执行 15 def get_is_run(self,row): 16 flag = None 17 col = int(data_config.get_run()) 18 run_model = self.opera_excel.get_cell_value(row,col) 19 if run_model == \'yes\': 20 flag = True 21 else: 22 flag = False 23 return flag 24 25 #是否携带header 26 def is_header(self,row): 27 col = int(data_config.get_header()) 28 header = self.opera_excel.get_cell_value(row,col) 29 if header != \'\': 30 return header 31 else: 32 return None 33 34 #获取请求方式 35 def get_request_method(self,row): 36 col = int(data_config.get_run_way()) 37 request_method = self.opera_excel.get_cell_value(row,col) 38 return request_method 39 40 #获取url 41 def get_request_url(self,row): 42 col = int(data_config.get_url()) 43 url = self.opera_excel.get_cell_value(row,col) 44 return url 45 46 #获取请求数据 47 def get_request_data(self,row): 48 col = int(data_config.get_data()) 49 data = self.opera_excel.get_cell_value(row,col) 50 if data == \'\': 51 return None 52 return data 53 54 #通过获取关键字拿到data数据 55 def get_data_for_json(self,row): 56 opera_json = OperetionJson() 57 request_data = opera_json.get_data(self.get_request_data(row)) 58 return request_data 59 60 #获取预期结果 61 def get_expcet_data(self,row): 62 col = int(data_config.get_expect()) 63 expect = self.opera_excel.get_cell_value(row,col) 64 if expect == \'\': 65 return None 66 return expect 67 68 #通过sql获取预期结果 69 def get_expcet_data_for_mysql(self,row): 70 op_mysql = OperationMysql() 71 sql = self.get_expcet_data(row) 72 res = op_mysql.search_one(sql) 73 return res.decode(\'unicode-escape\') 74 75 def write_result(self,row,value): 76 col = int(data_config.get_result()) 77 self.opera_excel.write_value(row,col,value) 78 79 #获取依赖数据的key 80 def get_depend_key(self,row): 81 col = int(data_config.get_data_depend()) 82 depent_key = self.opera_excel.get_cell_value(row,col) 83 if depent_key == "": 84 return None 85 else: 86 return depent_key 87 88 #判断是否有case依赖 89 def is_depend(self,row): 90 col = int(data_config.get_case_depend()) 91 depend_case_id = self.opera_excel.get_cell_value(row,col) 92 if depend_case_id == "": 93 return None 94 else: 95 return depend_case_id 96 97 #获取数据依赖字段 98 def get_depend_field(self,row): 99 col = int(data_config.get_field_depend()) 100 data = self.opera_excel.get_cell_value(row,col) 101 if data == "": 102 return None 103 else: 104 return data
4.2 获取excel中每个列(data_config.py)
1 #coding:utf-8 2 class global_var: 3 #case_id 4 Id = \'0\' 5 request_name = \'1\' 6 url = \'2\' 7 run = \'3\' 8 request_way = \'4\' 9 header = \'5\' 10 case_depend = \'6\' 11 data_depend = \'7\' 12 field_depend = \'8\' 13 data = \'9\' 14 expect = \'10\' 15 result = \'11\' 16 #获取caseid 17 def get_id(): 18 return global_var.Id 19 20 #获取url 21 def get_url(): 22 return global_var.url 23 24 def get_run(): 25 return global_var.run 26 27 def get_run_way(): 28 return global_var.request_way 29 30 def get_header(): 31 return global_var.header 32 33 def get_case_depend(): 34 return global_var.case_depend 35 36 def get_data_depend(): 37 return global_var.data_depend 38 39 def get_field_depend(): 40 return global_var.field_depend 41 42 def get_data(): 43 return global_var.data 44 45 def get_expect(): 46 return global_var.expect 47 48 def get_result(): 49 return global_var.result 50 51 def get_header_value(): 52 return global_var.header
4.3 解决数据依赖(dependent.py )
1 #coding:utf-8 2 import sys 3 import json 4 sys.path.append(\'C:/Users/lxz/Desktop/InterFace_JIA\') 5 from tool.operation_excel import OperationExcel 6 from base.runmethod import RunMethod 7 from operation_data.get_data import GetData 8 from jsonpath_rw import jsonpath,parse 9 class DependdentData: 10 def __init__(self,case_id): 11 self.case_id = case_id 12 self.opera_excel = OperationExcel() 13 self.data = GetData() 14 15 #通过case_id去获取该case_id的整行数据 16 def get_case_line_data(self): 17 rows_data = self.opera_excel.get_rows_data(self.case_id) 18 return rows_data 19 20 #执行依赖测试,获取结果 21 def run_dependent(self): 22 run_method = RunMethod() 23 row_num = self.opera_excel.get_row_num(self.case_id) 24 request_data = self.data.get_data_for_json(row_num) 25 #header = self.data.is_header(row_num) 26 method = self.data.get_request_method(row_num) 27 url = self.data.get_request_url(row_num) 28 res = run_method.run_main(method,url,request_data) 29 return json.loads(res) 30 31 #根据依赖的key去获取执行依赖测试case的响应,然后返回 32 def get_data_for_key(self,row): 33 depend_data = self.data.get_depend_key(row) 34 response_data = self.run_dependent() 35 json_exe = parse(depend_data) 36 madle = json_exe.find(response_data) 37 return [math.value for math in madle][0] 38 39 if __name__ == \'__main__\': 40 order = { 41 "data": { 42 "_input_charset": 接口框架 python+unittest+request+HTMLTestRunnerpython+unittest+requests实现接口自动化
Python接口测试之对MySQL/unittest框架/Requests 的操作