6.YAML文件详解、PyYaml操作
YAML简介:
- yaml是一种数据格式,支持注释,换行,多行字符串,裸字符串(正序,字符串)
YAML作用:
- 用于全局的配置文件
- 用于测试用例编写
YAML语法规则:
- 区分大小写
- 使用缩进表示层级,不能使用tab键进行缩进,只能用空格
- 缩进没有数量,只要前面对其就可以
- 注释是#
数据组成:
Map对象
#键值对,key:(空格)value,必须加空格,如果换行,可以不加空格
#多行写法
yamltest:
key: value,
key2: value2
#一行写法
yamltest2: {key: 1, key2: 2}
#写法3
key: value
数组
#每个结构下面,对其的-,表示是同一个数组
#示例1
yamltest:
-key: value,
-key2: value2
#结果等同于{'yamltest':[{'key':value},{'key2':value2}]}
# 示例2
-
test1: #注意缩进
a: 2
b: 3
-
test2:
a: 2
b: 3
"""
结果等同于
[
{
"test1": {
"a": 2,
"b": 3
}
},
{
"test2": {
"a": 2,
"b": 3
}
}
]
"""
python操作yaml
python操作yaml的包:pyyaml
安装:pip3 install pyyaml
导入:import yaml
yaml.load()
yaml.load(stream,Loader)
函数的作用是用来将YAML文档转化成Python对象
stream:文件流
Loader:加载方式
返回值:返回值为一个Python字典对象
yaml.load_all()
yaml.load_all(stream,Loader)
如果string或文件包含几块yaml文档,你可以使用yaml.load_all来解析全部的文档
stream:文件流
Loader:加载方式
返回值:返回值为一个Python字典对象
yaml.dump()
yaml.dump(data, stream=None, Dumper=Dumper, **kwds)
将一个python对象生成为yaml文档
Loader加载方式
BaseLoader 仅加载最基本的YAML
SafeLoader 安全地加载YAML语言的子集。建议用于加载不受信任的输入(safe_load)
FullLoader 加载完整YAML语言。避免任意代码执行。这是默认加载器(full_load)
UnsafeLoader 也称为Loader向后兼容性,原始的Loader代码,不受信任的数据可能通过这种方式执行其他有危害的代码
# -*- coding: utf-8 -*-
# @Time: 2022/5/4 13:51
# @Author: LiQi
# @Describe:
import yaml
class YamlUtil:
def __init__(self, yaml_file):
'''
:param yaml_file: yaml文件,通过初始化把文件传入到操作yaml的类
'''
self.yaml_file = yaml_file
# 读取yaml文件
def read_yaml(self):
'''
读取yaml,对yaml进行反序列
'''
# 打开yaml文件得到文件f
with open(self.yaml_file, encoding='utf-8') as f:
# yaml.FullLoader加载方式
value = yaml.load(f, Loader=yaml.FullLoader)
return value
接口请求示例
#yaml用例 - name: 接口名称 request: url: https://xxxxxxx.com #请求地址 method: get #请求方式 headers: #请求头 Content-Type: applicstion/json params: #请求参数 k1: v1 k2: v2 validate:#断言 - eq: {code: 0} - eq: {statys: 200}
# 接口请求
import pytest import requests from .yaml_util import YamlUtil class TestApi: # YamlUtil是之前封装好的读取yaml的类 @pytest.mark.parametrize('args', YamlUtil('./test.yaml').read_yaml()) def test_01_api(self, args): url = args['request']['url'] params = args['request']['params'] res = requests.get(url, params) assert args['eq'] in res.txt
如果yaml里面有多个结构用例,args里面有多条数据,有多少条数据,方法就可以执行多少次,所以我们可以yaml里面有多条用例,然后一个方法读取运行
风月都好看,人间也浪漫.
分类:
Pytest测试框架
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧