python系列——接口測試之斷言封裝


前言:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM