接口封装遇到的坑--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
每篇一句:
原来你就在这儿