zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    传输对象模式
    服务定位器模式
    拦截过滤器模式
    前端控制器模式
    数据访问对象模式
    组合实体模式
    业务代表模式
    MVC 模式
    访问者模式
    模板模式
  • 原文地址:https://www.cnblogs.com/miaoxiaochao/p/13336203.html
Copyright © 2011-2022 走看看