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

文章介绍了如何在Python中通过`read_testcase`和`ddt`函数判断并处理带有`parametrize`的yaml测试用例,确保数据一致性,以及如何在yaml用例中正确设置和使用数据,特别关注了字符串类型的数字转换。
摘要由CSDN通过智能技术生成

1. 判断是否为ddt数据

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

2. 处理数据

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

3. yaml用例中设置和使用数据

-
  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" ]

Python是一种高级编程语言,它具有简单易学、代码可读性强、功能强大等特点。YAML是一种轻量级的数据序列化格式,它可以用来表示复杂的数据结构,比如列表、字典等。PytestPython中的一个测试框架,它可以帮助我们编写简单、可读性强的测试用例DDT(Data-Driven Testing)是一种测试方法,它可以帮助我们更加高效地编写测试用例,通过将测试数据和测试逻辑分离,从而减少了测试用例的编写量。 在Pytest中,我们可以使用DDT来实现数据驱动测试。具体来说,我们可以将测试数据存储在YAML文件中,然后使用PyYAML库来读取这些数据。接着,我们可以使用@pytest.mark.parametrize装饰器来将测试数据传递给测试函数,从而实现数据驱动测试。 下面是一个使用PytestDDT进行数据驱动测试的示例代码: ```python import yaml import pytest def read_data(): with open('test_data.yaml', 'r') as f: data = yaml.safe_load(f) return data @pytest.mark.parametrize('test_input, expected_output', read_data()) def test_my_function(test_input, expected_output): assert my_function(test_input) == expected_output ``` 在上面的代码中,read_data函数用来读取YAML文件中的测试数据,然后将其返回。@pytest.mark.parametrize装饰器用来将测试数据传递给test_my_function函数,其中test_input和expected_output分别对应YAML文件中的输入数据和期望输出数据。最后,我们可以在test_my_function函数中编写测试逻辑,从而完成数据驱动测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值