Python YAML 模块使用教程:接口测试参数存储与配置
文章目录
一、YAML介绍
YAML 是一种数据序列化语言,用于以人类可读的形式存储信息。其最初代表“Yet Another Markup Language”,后更改为“YAML Ain’t Markup Language”(YAML 不是一种标记语言),以区别于传统标记语言。
1.1 核心特点
- 简洁易读:语法简洁,减少 JSON、XML 中的引号、括号等“噪音”格式;
- 非编程语言:主要用于存储配置信息,不具备编程逻辑;
- 缩进敏感:缩进规则类似 Python,通过缩进来表示层级关系;
- 区分大小写:对键名、值的大小写严格区分;
- 禁用 Tab 键:不允许使用制表符缩进,需通过空格实现缩进(部分编辑器可配置 Tab 自动转为空格)。
1.2 支持的数据类型及语法对比(与JSON)
YAML 文件后缀名为 .yaml 或 .yml(常用 .yml),支持多种数据类型,其语法与 JSON 对比如下:
| 数据类型 | YAML 语法 | JSON 语法 |
|---|---|---|
| 简单标量值 | key: value | {"key": "value"} |
| 整数和浮点数 | int_key: 123 float_key: 123.456 | {"int_key": 123, "float_key": 123.456} |
| 布尔值 | bool_key: true | {"bool_key": true} |
| 字符串 | string_key: “This is a string” | {"string_key": "This is a string"} |
| 列表 | list_key: - item1 - item2 - item3 | {"list_key": ["item1", "item2", "item3"]} |
| 映射(字典) | map_key: sub_key1: sub_value1 sub_key2: sub_value2 | {"map_key": {"sub_key1": "sub_value1", "sub_key2": "sub_value2"}} |
| 嵌套结构 | nested_key: list_key: - item1 - item2 map_key: sub_key1: sub_value1 sub_key2: sub_value2 | {"nested_key": {"list_key": ["item1", "item2"], "map_key": {"sub_key1": "sub_value1", "sub_key2": "sub_value2"}}} |
1.3 语法辅助工具
若对 YAML 语法不熟悉,可使用 JSON 转 YAML 工具快速生成,生成后需二次检查格式正确性。
工具地址:https://www.jashtool.com/json/to-yaml
示例:
二、YAML 使用(Python 环境)
在 Python 中使用 YAML 需借助 PyYAML 库,主要用于读取、写入、清空 YAML 配置文件,适用于接口自动化测试中的参数存储、配置管理等场景。
2.1 安装 PyYAML 库
安装命令:
pip install PyYAML 安装后可通过pip list查看是否安装成功
2.2 核心操作(读取、写入、清空)
2.1 追加写入 YAML 文件
向指定 YAML 文件追加数据(若文件不存在则自动创建):
import yaml import os defwrite_yaml(filename, data):# 拼接文件路径(默认在项目根目录的 data 文件夹下) file_path = os.getcwd()+"/data/"+ filename # 以追加模式打开文件,指定编码为 utf-8withopen(file_path, encoding="utf-8", mode="a+")as f:# 安全写入数据,支持 Unicode 字符 yaml.safe_dump(data, stream=f, allow_unicode=True)2.2 读取 YAML 文件数据
根据指定键读取 YAML 文件中的对应值:
import yaml import os defread_yaml(filename, key): file_path = os.getcwd()+"/data/"+ filename withopen(file_path, encoding="utf-8", mode="r")as f:# 安全加载 YAML 数据 data = yaml.safe_load(f)# 返回指定键对应的值return data[key]2.3 清空 YAML 文件
清空指定 YAML 文件中的所有内容:
import os defclear_yaml(filename): file_path = os.getcwd()+"/data/"+ filename withopen(file_path, encoding="utf-8", mode="w")as f:# 清空文件内容 f.truncate()2.3 完整使用示例
import yaml import os # 追加写入defwrite_yaml(filename, data): file_path = os.getcwd()+"/data/"+ filename withopen(file_path, encoding="utf-8", mode="a+")as f: yaml.safe_dump(data, stream=f, allow_unicode=True)# 读取defread_yaml(filename, key): file_path = os.getcwd()+"/data/"+ filename withopen(file_path, encoding="utf-8", mode="r")as f: data = yaml.safe_load(f)return data[key]# 清空defclear_yaml(filename): file_path = os.getcwd()+"/data/"+ filename withopen(file_path, encoding="utf-8", mode="w")as f: f.truncate()# 测试函数deftest_yml():# 1. 写入 YAML 文件(数据为字典类型) data ={"str":"12345","user":"zhangsan","password":"123456"} write_yaml('test.yml', data)# 2. 读取 YAML 文件中 "str" 键对应的值 ret = read_yaml('test.yml',"str")print("读取结果:", ret)# 输出:读取结果: 12345# 3. 清空 YAML 文件 clear_yaml('test.yml')# 执行测试if __name__ =="__main__": test_yml()2.4 关键说明
yaml.safe_dump():安全写入数据,避免执行恶意代码,推荐优先使用(而非yaml.dump());yaml.safe_load():安全加载数据,同样用于防范恶意代码,避免使用yaml.load()(存在安全风险);- 文件路径:示例中默认将 YAML 文件放在项目根目录的
data文件夹下,需确保该文件夹已创建,否则会抛出文件不存在异常; - 编码格式:指定
encoding="utf-8"避免中文等特殊字符出现乱码。