今日内容:接口自动化测试框架封装之数据类型处理以及DDT数据驱动封装
一、数据类型处理
“${read_extract_data(tag_id)}” 替换成 110
json
: {
"tag"
:{
"id"
:
"${read_extract_data(tag_id)}"
}}
二、DDT数据驱动封装
数据驱动可以利用 excel,csv,yaml
用excel,csv的缺点
1.数据类型难处理
2.调用函数不是很方便
简单的操作:
yaml中用例复制一遍 改一些参数信息
DDT数据驱动方法 $ddt{}
![](https://img-blog.csdnimg.cn/da3731d724ba4aa088a1dc2681d8fc0d.png)
![](https://img-blog.csdnimg.cn/181368d86c524728b21383c297cd5936.png)
对 $ddt{}中的数据数据进行替换
def ddt(caseinfo):
if "parameterize" in caseinfo.keys():
caseinfo_str = json.dumps(caseinfo)
for param_key, param_value in caseinfo["parameterize"].items():
key_list = param_key.split("-")
print("------key和value------")
print(key_list,param_value)
length_flag = True
print("------data数据列表------")
#规范yaml数据文件的写法
data_list = read_data_yaml(param_value)
for data in data_list:
print(data)
if len(data) != len(key_list):
length_flag = False
break
# 替换值
print("------替换值------")
new_caseinfo = []
if length_flag:
for x in range(1, len(data_list)): # 循环数据的行数
temp_caseinfo = caseinfo_str
for y in range(0, len(data_list[x])): # 循环数据列
if data_list[0][y] in key_list:
# 替换原始的yaml里面的$ddt{}
# 数字类型去掉“”
if isinstance(data_list[x][y], int) or isinstance(data_list[x][y], float):
temp_caseinfo = temp_caseinfo.replace('"$ddt{'+data_list[0][y]+'}"',str(data_list[x][y]))
else:
temp_caseinfo = temp_caseinfo.replace("$ddt{"+data_list[0][y]+"}", str(data_list[x][y]))
print(temp_caseinfo)
new_caseinfo.append(json.loads(temp_caseinfo))
return new_caseinfo
else:
return caseinfo
@allure.story("删除标签")
@pytest.mark.parametrize("caseinfo", read_testcase_yaml("./testcases/wx/delete_flag.yaml"))
def test_delete_flag(self, caseinfo):
res = RequestsUtil("base", "base_weixin_url",WxFun()).standard_yaml(caseinfo)
运行结果![](https://img-blog.csdnimg.cn/3500802b2bcf4e2eaa7eff7e32624d08.png)