接口封装遇到的坑--4
接口ddt数据驱动:
1.$ddt{name} 中的name就是和参数名字一致
name: $ddt{name}
parameterize:
name-appid-secret-grant_type-assert_str: /datas/datas_get_token.yaml
2.parameterize_util 文件里面所需的
注:1)# caseinfo_str = json.dumps(caseinfo),这句放在if判断里面和外面没有区别
2)# tem_caseinfo = caseinfo_str,这是要组装数据,需要放在遍历行之后接收每一组的数据,new_caseinfo.append(json.loads(tem_caseinfo)),也需要和tem_caseinfo = caseinfo_str,对齐,表示每一组数据
import json
import os
import yaml
from common.yaml_util import read_datas_yaml
# 读取测试用例的yaml
def read_testcases_yaml(yaml_path):
with open(os.getcwd() + yaml_path, encoding='utf-8') as f:
caseinfo = yaml.load(f, Loader=yaml.FullLoader)
if len(caseinfo) >= 2:
return caseinfo
else:
if "parameterize" in dict(*caseinfo).keys():
new_caseinfo = ddt(*caseinfo)
return new_caseinfo
else:
return caseinfo
def ddt(caseinfo):
# 错误示范:
# for caseinfo_key in caseinfo.keys():
# if "parameterize" in caseinfo_key:
# caseinfo_str = json.dumps(caseinfo)
if "parameterize" in caseinfo.keys():
# 转换成json字符串,后面方便替换
caseinfo_str = json.dumps(caseinfo)
for param_key, param_value in caseinfo["parameterize"].items():
param_list = str(param_key).split("-")
# 读取yaml文件的datas文件
datas_list = read_datas_yaml(param_value)
islens = True
for data_list in datas_list:
if len(param_list) != len(data_list):
islens = False
break
# 替换值(前提是需要找到每一个参数的值,datas_list代表三个列表的总列表)
# tem_caseinfo = caseinfo_str
new_caseinfo = []
if islens:
for x in range(1, len(datas_list)):
tem_caseinfo = caseinfo_str
for y in range(0, len(datas_list[x])):
# 替换
if datas_list[0][y] in param_list:
if isinstance(datas_list[x][y], int) or isinstance(datas_list[x][y], float):
tem_caseinfo = tem_caseinfo.replace('"$ddt{' + datas_list[0][y] + '}"',
str(datas_list[x][y]))
else:
tem_caseinfo = tem_caseinfo.replace("$ddt{" + datas_list[0][y] + "}",
str(datas_list[x][y]))
new_caseinfo.append(json.loads(tem_caseinfo))
print(tem_caseinfo)
return new_caseinfo
else:
return caseinfo
每篇一句:
原来你就在这儿