前言:
1、check_tuils中新建以下方法:对接口返回的数据进行断言(注意:不同数据格式)
def check_key(self,check_data=None): #json键值是否存在 check_data_list = check_data.split(',') res_list = [] #存放每次比较的结果 wrong_key = [] #存放比较失败key for check_data in check_data_list: if check_data in self.ck_response.json().keys(): res_list.append( True ) else: res_list.append( False ) wrong_key.append(check_data) if False in res_list: return False else: return True
def check_keyvalue(self,check_data=None): #json键值对是否存在 res_list = [] # 存放每次比较的结果 wrong_items = [] # 存放比较失败 items for check_item in ast.literal_eval(check_data).items(): if check_item in self.ck_response.json().items(): res_list.append( True ) else: res_list.append( False) wrong_items.append(check_item) print( res_list ) print( wrong_items ) if False in res_list: return False else: return True
def check_regexp(self,check_data=None): #正则匹配 pattern = re.compile(check_data) if re.findall(pattern=pattern,string=self.ck_response.text): return True else: return False
2、将所有方法中的True和False替换掉,如:
def check_regexp(self,check_data=None): #正则匹配 pattern = re.compile(check_data) if re.findall(pattern=pattern,string=self.ck_response.text): return self.pass_result #改动:True =》self.pass_result else: return self.fail_result #改动:False =》self.fail_result
3、综上,在check_utils另新增一个运行以上所有断言方法的引擎
def run_check(self,check_type=None,check_data=None): code = self.ck_response.status_code if code == 200: #判断code if check_type in self.ck_rules.keys(): #判断检查类型 result = self.ck_rules[check_type](check_data) # self.check_keyvalue(check_data) 执行类的方法 return result else: self.fail_result['message'] = '不支持%s判断方法'%check_type return self.fail_result else: self.fail_result['message'] = '请求的响应状态码非%s'%str(code) return self.fail_result
4、最后,把request_utils封装的响应结果移到check_utils中来,将check_utils方法整合到requests_utils
class CheckUtils(): def __init__(self,check_response=None): self.ck_response = check_response self.ck_rules = { '无':self.no_check, 'json键是否存在':self.check_key, 'json键值对':self.check_keyvalue, '正则匹配':self.check_regexp } self.pass_result = { #从requests_utils中挪过来 'code':0, 'response_reason':self.ck_response.reason, 'response_code':self.ck_response.status_code, 'response_headers':self.ck_response.headers, 'response_body':self.ck_response.text, 'check_result':True, 'message':'' # 拓展,以后可作为日志输出等 } self.fail_result = { 'code':2, 'response_reason':self.ck_response.reason, 'response_code':self.ck_response.status_code, 'response_headers':self.ck_response.headers, 'response_body':self.ck_response.text, 'check_result':False, 'message':'' # 拓展,以后可作为日志输出等 }
#requests_utils原来的模样
result = CheckUtils(response).run_check(get_info['期望结果类型'], get_info['期望结果']) result = { #该部分可以去掉 'code':0, #请求是否成功的标志 'response_reason':response.reason, 'response_code':response.status_code, 'response_headers':response.headers, 'response_body':response.text, 'check_result':True, 'message':'' # 扩招作为日志输出等 } return result
#requests_utils整合后 result = CheckUtils(response).run_check(get_info['期望结果类型'], get_info['期望结果']) return result