从0开始python学习-52.pytest之ddt数据封装

  1. 判断是否为ddt数据
python 复制代码
def read_testcase(yaml_path):
    with open(yaml_path,encoding="utf-8") as f:
        case_list = yaml.safe_load(f)
        if "parametrize" in dict(*case_list).keys(): # 读取出来的yaml用例带有parametrize就说明是ddt用例,格式为:[{}]
            new_caseinfo = ddt(*case_list)
            return new_caseinfo # 将数据解包后,返回格式为:[{},{}]
        else:
            return case_list
  1. 处理数据
python 复制代码
def ddt(caseinfo:dict):
    data_list = caseinfo["parametrize"] # 获取到caseinfo下的parametrize数据
    len_flag = True # 设置一个判断指标
    name_len = len(data_list[0])  # 获取参数的长度,即有几个参数
    for data in data_list:
        if len(data) != name_len: # 判断获取到的所有的参数长度是否与name_len一致,不一致直接结束
            len_flag = False
            print("parametrize数据长度不一致")
            break

    # 将caseinfo转为str类型方便后续操作
    str_caseinfo = yaml.dump(caseinfo)
    new_caseinfo = []
    if len_flag: # 当长度一致时,进行后续操作
        for x in range(1,len(data_list)): # 从下标为1开始取行数据,即排除数据名称行后的就是用例数据行
            raw_caseinfo = str_caseinfo
            for y in range(0,name_len): # 从下标为0开始取列数据,即长度有多少就去多少列
                # 处理数字类型的字符串数据
                if isinstance(data_list[x][y],str) and data_list[x][y].isdigit():
                    data_list[x][y] = "'" + data_list[x][y] + "'" # 转为字符串类型的数字
                raw_caseinfo = raw_caseinfo.replace("$ddt{"+data_list[0][y]+"}",str(data_list[x][y])) # 将获取到的数据写入
            case_list = yaml.safe_load(raw_caseinfo) # 再次进行数据转换回list
            case_list.pop("parametrize")
            new_caseinfo.append(case_list)
    return new_caseinfo
  1. yaml用例中设置和使用数据
python 复制代码
-
  feature: 测试模块4
  story: 测试接口4
  title: 验证测试接口4正常返回
  request:
    method: post
    url: http://192.168.0.1/phpwind/index.php?m=u&c=login&a=dorun
    data:
      username: $ddt{username}
      password:  $ddt{password}
  parametrize:
    - [ "username","password" ]
    - [ "ces1","123" ]
    - [ "ces2",123 ]
    - [ "ces","ces" ]
相关推荐
五网3 小时前
软件测试用例模板怎么写:从用例设计到执行记录的全套指南
软件测试·论文阅读·全文检索·测试用例·论文笔记·用例设计·用例模板
apcipot_rain8 小时前
C++转Java日记(04)
java·开发语言·c++
特立独行的猫A8 小时前
我给女儿写了个打字练习:一边敲键盘,一边把小学英语单词记牢
java·后端·python
cpolar技术支持8 小时前
「我这边连不上你那个服务」—— 用清单驱动的 TCP 连通性只读看板,cpolar 让远端同事自己取证
python·内网穿透·tcp·cpolar·网络诊断
云和数据.ChenGuang9 小时前
LangGraph 异步 Node 的设计与写法实践
开发语言·人工智能·python·机器学习·php
天诰10 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
benchmark_cc11 小时前
用 QuantDash 读取美股行情:AAPL.US 的运行前检查、排错顺序与数据校验清单
python·数据分析·pandas·量化交易·股票数据·quantdash
La Pulga11 小时前
【FreeRTOS源码学习笔记】任务延时列表
笔记·mcu·学习·嵌入式·freertos·实时操作系统
蜗牛一步步往上爬12 小时前
第十六章 C++语言在深度学习中的应用
开发语言·c++·深度学习
楚山之石12 小时前
【JCO】mpMRI 先行替代 TURBT 初始分期:BladderPath 随机试验让 MIBC 患者提前 45 天得到正确治疗
人工智能·学习·mri·医学影像