python+requests+pytest 接口自动化框架(七)
内容:接口自动化测试框架封装之热加载封装以及断言封装
·
目录
内容:接口自动化测试框架封装之热加载封装以及断言封装
一、接口自动化框架封装之热加载
热加载:就是在代码执行过程当中动态的调用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
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)