文章目录
Yaml格式简介
Yaml是专门用来写配置文件的语言,非常简洁强大,比JSON格式方便。可用来做自动化测试框架的配置文件或用例文件
安装yaml:pip install PyYaml
Yaml格式语法
基本类型
- 字符串
- 整形
- 浮点型
- 布尔型
- null
- 时间
- 日期
基本规则
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab,只允许使用空格
- 缩进空格数目不重要,只要相同层级的元素对齐即可
- #表示注释当前行
- 冒号后需要加空格
- 外层的格式要保持一致
1、Yaml转字典
#conf.yaml文件
username: user01
password: 123456
#py文件,读取yaml文件并转换成字典
import yaml
def get_yaml_data(filedir):
with open(filedir,'r',encoding='UTF-8') as file1:
res = yaml.load(file1,Loader=yaml.FullLoader)
print(res)
if __name__ == '__main__':
get_yaml_data('../configs/conf.yaml')
#执行结果:
{
'username': 'user01', 'password': 123456}
2、Yaml转列表
#conf.yaml文件
- 10
-
- 101
- 102
#执行结果:
[10, [101, 102]]
3、Yaml 列表套字典
#conf.yaml文件
- 10
-
username: user01
password: 123456
#执行结果:
[10, {
'username': 'user01', 'password': 123456}]
4、Yaml 字典套列表
#conf.yaml文件
username: user01
password: 123456
info:
- 101
- 102
#执行结果:
{
'username': 'user01', 'password': 123456, 'info': [101, 102]}
5、特殊符号的处理
- 字符中间包含\n \t时,需要加双引号才能保持原样,否则变为\n,\t
- 需要保留单引号时,外层用双引号引起
6、变量的定义、引用
#conf.yaml文件
name: &user Marry
label1: *user
label2: *user
#执行结果:
{
'name': 'Marry', 'label1': 'Marry', 'label2': 'Marry'}
7、多个yaml写在一起
使用—作为分隔符
#conf.yaml文件
username: marry
password: 123456
---
- 101
- 102
- 103
import yaml
def get_yamls_data(filedir):
with open(filedir,'r',encoding='UTF-8') as file1:
resList = []
res = yaml.load_all(file1,Loader=yaml.FullLoader) #读多个yaml使用yaml.load_all
for one in res:
resList.append(one)
print(resList)
if __name__ == '__main__':
get_yamls_data('../configs/conf.yaml')
8、继承其他yaml文件
#a.yaml
username: marry
password: 123456
info: !include b.yaml # 继承b.yaml文件数据
#b.yaml
- 101
- 102
- 103
#继承yaml .py文件
import yaml
import os.path
class Loader(yaml.Loader):
def __init__(self,stream):
self.root = os.path.split(stream.name)[0]
super(Loader,self).__init__(stream)
def include(self,node):
filename = os.path.join(self.root,self.construct_scalar(node))
with open(filename,'r') as f:
return yaml.load(f,Loader)
Loader.add_constructor('!include',Loader.include)
if __name__ == '__main__':
with open('../configs/a.yaml') as f:
data = yaml.load(f,Loader)
print(data)
#执行结果:
{
'username': 'marry', 'password': 123456, 'info': [101, 102, 103]}