pytest之通过yaml实现数据驱动

目录

1、yaml基本语法

1.1 yaml格式

1.2 yaml的基本语法

1.3 yaml的数据类型

1.4 yaml的使用

2、封装读取yaml的方法

3、通过@pytest.mark.parametrize()实现yaml的数据驱动


1、yaml基本语法

1.1 yaml格式

以.yaml格式为后缀

键值对使用冒号结构表示key: value,冒号后面要加一个空格

1.2 yaml的基本语法

大小写敏感

使用缩进表示层级关系

缩进不允许使用tal,只允许使用空格

缩进的空格数不重要,只要相同层级的元素左对齐即可

#表示注释

1.3 yaml的数据类型

对象:键值对的集合,又称为映射/哈希/字典

数组:一组按次序排列的值,又称为序列/列表

纯量:单个的,不可再分的值

1.4 yaml的使用

pip install pyyaml

import yaml

具体方法:

yaml.load(f)  # 作用是将yaml文档转化为python对象

yaml.load_all(f)  # 返回yaml文件中所有的yaml文档的对象生成一个迭代器,再使用for打印出来

yaml.dump(c,f)  # 将一个python对象生成yaml文档,存放再f中

yaml.dump_all(c,f)  # 将多个python对象生成yaml文档,存放在f中

yaml文件小demo:

-
 name: zhangsan
 age: 15
 score:
  - English: 90
  - Chinese: 92
  - Math: 95


-
 name: 李四
 age: 18
 score:
  - English: 90
  - Chinese: 82
  - Math: 85

2、封装读取yaml的方法

import yaml


class yamlUtil(object):
    def __init__(self, yaml_file):
        '''
        通过init把文件传入到这个类中
        :param yaml_file
        '''
        self.yaml_file = yaml_file

    def read_yaml(self):
        '''
        读取yaml,将yaml反序列化,就是把yaml格式转换为dict格式
        '''
        with open(self.yaml_file, encoding="utf-8") as f:
            value = yaml.load(stream=f, Loader=yaml.FullLoader)  # 文件流,加载方式
            print(value)
            return value


# if __name__ == '__main__':
#     yamlUtil("../../testcases/yaml/demo_yaml.yaml").read_yaml()

3、通过@pytest.mark.parametrize()实现yaml的数据驱动

import pytest
import os
from day20220702.demo_pytest.common.yaml_util.yamlUtil import yamlUtil


class Test_yaml(object):
    dizhi = os.getcwd() + "\yaml\demo_yaml.yaml"
    print(dizhi)

    @pytest.mark.parametrize("args", yamlUtil(os.getcwd() + "\yaml\demo_yaml.yaml").read_yaml())
    def test_yaml(self, args):
        # print(args)
        name = args['name']
        age = args['age']
        # english_score = args['score'][0]['English']

 

### 使用 YAML 文件实现数据驱动测试的优势 在 `pytest` 中结合 YAML 文件进行数据驱动测试,可以显著提升测试脚本的可维护性和灵活性。通过将测试逻辑与测试数据分离,不仅增强了代码的可读性,还便于后续扩展和管理[^1]。 #### 1. 安装依赖库 YAML 是一种结构化且易于阅读的数据格式,常用于存储配置文件或测试数据。要使用 YAML 文件,需要安装 `PyYAML` 库: ```bash pip install pyyaml ``` #### 2. 准备 YAML 测试数据文件 创建一个名为 `test_cases.yaml` 的文件,并在其中定义多个测试用例: ```yaml - url: "https://api.example.com/data1" expected_status: 200 - url: "https://api.example.com/data2" expected_status: 404 ``` 该文件中包含两个测试用例,每个用例都有一个 URL 和预期的 HTTP 状态码。 #### 3. 编写数据驱动测试脚本 在 `pytest` 脚本中加载 YAML 文件,并使用 `@pytest.mark.parametrize` 实现参数化测试: ```python import pytest import requests import yaml # 从 YAML 文件中加载测试数据 with open("test_cases.yaml") as f: test_data = yaml.safe_load(f) @pytest.mark.parametrize("case", test_data) def test_api_response(case): response = requests.get(case["url"]) assert response.status_code == case["expected_status"] ``` 上述代码通过 `yaml.safe_load()` 方法解析 YAML 文件内容,并将其作为参数传递给测试函数。每次测试执行时,都会使用不同的数据集运行相同的测试逻辑。 #### 4. 使用外部数据文件增强灵活性 如果测试数据较为复杂,例如涉及多组参数或多层级结构,可以在 YAML 文件中引用外部数据文件。例如,在主 YAML 文件中使用 `!include` 指令引入其他 YAML 文件中的数据: ```yaml test_name: 从文件中加载数据 mark: - parametrize: - n - !include ddt_n.yaml steps: - request: method: get url: https://baidu.com?o=${n} ``` 这种方式允许将不同测试场景的数据模块化,提高数据复用性和可维护性[^2]。 ### 注意事项 - **数据格式一致性**:确保 YAML 文件中的键名与测试脚本中使用的字段一致。 - **异常处理**:在网络请求失败或状态码不匹配的情况下,应添加适当的错误处理机制。 - **日志记录**:建议在测试过程中输出详细的日志信息,以便快速定位问题。 - **环境隔离**:为不同环境(如开发、测试)准备独立的 YAML 数据文件,避免相互干扰。 ### 总结 利用 `pytest` 结合 YAML 文件实现数据驱动测试,能够有效提升测试效率和可维护性。通过参数化装饰器和外部数据文件的配合,可以灵活地管理测试数据并适配多种测试场景。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值