接口封装遇到的坑--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

  每篇一句:

  原来你就在这儿