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
原文地址:https://www.cnblogs.com/miaoxiaochao/p/13336203.html