前言:
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