目录

一、接口自动化框架封装之热加载

热加载:就是在代码执行过程当中动态的调用Python中的方法达到或得动态参数的目的。
1.wx_fun.py(自定义)文件中定义方法,注意返回值需要字符串的就返回字符串,需要整型的就返回整型,如下:
class WxFun:
    #获取随机数
    def get_randon_number(self,min,max):
        return random.randint(int(min),int(max))

 2.在测试用例当中传入类的对象,如WxFun()

RequestsUtil("base", "base_weixin_url",WxFun()).standard_yaml(caseinfo)
3.在YAML测试用例中调用函数:
如:${get_randon_number(9,99)}
-
  name: 创建标签接口
  base_url: ${read_config_yaml(base,base_weixin_url)}
  request:
    method: post
    url: /cgi-bin/tags/create?access_token=${read_extract_yaml(access_token)}
    json: {"tag": {"name":"${get_randon_number(9,99)}"}}
  extract:
    tag_id: $.tag.id
  validate:
    - equals: {status_code: 200}
4.利用反射 调用${}中的方法 获取动态参数的值
# 替换值的方法
    # Qa1(替换url,params,data,jsom,headers)
    # Qa2(string,int,float,list,dict)
    def replace_value(self, data):
        if data:
            # 保存数据类型
            data_type = type(data)
            # 判断数据类型
            if isinstance(data, dict) or isinstance(data, list):
                str_data = json.dumps(data)
            else:
                str_data = str(data)
            # 替换
            for cs in range(1, str_data.count('${') + 1):
                if "${" in str_data and "}" in str_data:
                    start_index = str_data.index("${")
                    end_index = str_data.index("}", start_index)
                    old_value = str_data[start_index:end_index + 1]
                    # 反射:通过字类的对象和方法符串调用方法
                    func_name = old_value[2:old_value.index('(')]
                    args_value1 = old_value[old_value.index('(') + 1:old_value.index(')')]
                    if args_value1 != "":
                        if "," in args_value1:
                            args_value2 = args_value1.split(',')
                            new_value = getattr(self.obj, func_name)(*args_value2)
                            print(new_value)
                        else:
                            print("func_name", func_name)
                            new_value = getattr(self.obj, func_name)(args_value1)
                    else:
                        new_value = getattr(self.obj, func_name)
                    # 数字类型去掉“”
                    if isinstance(new_value, int) or isinstance(new_value, float):
                        str_data = str_data.replace('"' + old_value + '"', str(new_value))
                    else:
                        str_data = str_data.replace(old_value, str(new_value))
            # 还原数据类型
            if isinstance(data, dict) or isinstance(data, list):
                data = json.loads(str_data)
            else:
                data = data_type(str_data)
        return data

二、断言封装

1.状态断言:

断言返回的状态码(res.status_code )为200

2.业务断言:

相等的断言

    def equals_assert(self, value, sj_restul, result_code):
        flag = 0
        for assert_key, assert_value in value.items():
            if assert_key == "status_code":
                if assert_value != result_code:
                    flag = flag + 1
            else:
                lists = jsonpath.jsonpath(sj_restul, '$..%s' % assert_key)
                if lists:
                    if assert_value not in lists:
                        flag = flag + 1
                else:
                    flag = flag + 1
        return flag

包含断言

    def contains_assert(self, value, sj_result):
        flag = 0
        if str(value) not in str(sj_result):
            flag = flag + 1
        return flag

大于断言

    def greater_than_assert(self, value, sj_result):
        flag = 0
        (assert_key, assert_value), = value.items()
        sj_value = (jsonpath.jsonpath(sj_result, '$..%s' % assert_key))[0]
        if assert_value >= sj_value:
            flag = flag + 1
        return flag

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐