“ yaml数据格式可谓是自动化测试领域一颗璀璨的明星,笔者最近正好要用到yaml数据格式,可是笔者始终找不到一个想要的yaml格式教程,于是便奋发图强,攻上yaml官网,钻研苦读最新版本的yaml,写下此篇教程,以供大家更加方便、快速、深入地了解yaml数据格式。“
PS:“ 此篇文章笔者希望新手老手都能顺序阅读,因为内容环环相扣,如果看不懂下文大概率是忽略了上文的关键点。 ”
- 博主每篇文章的注释都是干货!每个代码段都有详细注释。
基本概念
- yaml(YAML Ain't Markup Language):yaml是专注于数据data存储层面的语言
- 空格缩进表示层级关系(笔者实测在最新版yaml中支持tab缩进,但还是建议用空格缩进,避免不必要的麻烦)
- "#"表示注释
- 区分大小写
- 文件扩展名.yaml/.yml
- 字符串引号可以省略!!!
- 标准的JSON格式属于YAML的子格式,标准的JSON可以在YAML下运行
YAML列表
- "-" + 空格 + value开头,表示列表
- 缩进表示层级关系
# YAML列表表示法 # - + 空格 + value开头表示列表 # 实例1:[A,B,C] - A - B - C # 实例2:[[A,B],[C,D]] - - A - B - - C - D # 实例3: # -后不能缺少空格,缺少空格导致的后果 -A -B -C # 会被存储为格式:[-A-B-C]是一串字符串而不是列表
YAML对象
- 方式一
- 流式(flow)语法表示对象:key + 空格 + :{key1:value + , + key2:value}
- 方式二
- key:
缩进+key1: + 空格 + value
缩进+key2: + 空格 + value
# 方式一: # 流式(flow)语法表示对象 # key + 空格 + :{key1:value + , + key2:value} # 实例4:clientA:{name:张三, age:18, hobby:game} # 注意:在yaml中冒号:后一定要加空格 clientA: {name: 张三, age: 18, hobby: game} clientB: {name: 张三, age: 19, hobby: eating} # 方式二: # key: # 缩进+key1: + 空格 + value # 缩进+key2: + 空格 + value # 实例5: # 注意此写法中对象属于集合,读取时是无序的、可重复的 # 注意与下文列表+对象混合使用对比(实例6) # { # clientC:{name:张三,age:18 hobby:game} # clientD:{name:李四,age:19 hobby:hobby} # } # yaml语法 clientC: name: 张三 age: 18 hobby: game clientD: name: 李四 age: 19 hobby: eating
YAML列表+对象混合使用
- Space:空格
- 核心要点:
-Space表示列表
:Space表示对象
# 列表+对象混合使用 # Space:空格 # 核心要点: # -Space表示列表 # :Space表示对象 # 注意区分以下两种实例: # 实例6: # { # clientE:[{"name": "张三"},{"age": 18},{"hobby": "game"}] # clientF:[{"name": "李四"},{"age": 19},{"hobby": "eating"}] # } # yaml表示语法: clientE: - name: 张三 - age: 18 - hobby: game clientF: - name: 李四 - age: 19 - hobby: eating # 列表+对象多重嵌套 # 实例7: # [ # {name:张三,age:18 hobby:game }, # {name:李四,age:19 hobby:[game,eating,drinking] } # ] # yaml表示语法: - name: 张三 age: 18 hobby: game - name: 李四 age: 19 hobby: - game - eating - drinking
复杂的多值映射Mapping存储
- ?问号下的内容表示变量
- :冒号下的内容表示映射的值
# 复杂的多值映射Mapping存储 # ?问号下的内容表示变量 # :冒号下的内容表示映射的值 # 多值对应映射 # 实例8:CBA总决赛:[广东VS辽宁]三场比赛的时间分别是[5.7,5.8,5.9] ? - 广东 - 辽宁 : - 5.7 - 5.8 - 5.9 # 注意理解映射关系 # 表示广东队在5.7、5.8、5.9都有比赛 # 辽宁队在5.7、5.8、5.9都有比赛 # 在这个例子中,问号下每一个元素,都对应着冒号中三个值
文档分割
- ---表示一个文档的开始(只有一个文档时可不写)
- ...表示一个文档的结束(如果有---表示一个新文档的开始,则...可省略,规范写法需要...)
# 文档分割 # ---表示一个文档的开始(只有一个文档时可不写) # ...表示一个文档的结束(如果有---表示一个新文档的开始,则...可省略,规范写法需要...) # 一个文档中有两个子文档login和data实例: # 实例9: # 这是第一个子文档login --- -A -B -C ... # 这是第二个子文档data --- -dataA -dataB -dataC ... # 上述表示一个文档被分割为两个子文档
数据的重复引用
- 存储:&+自定义命名
- 引用:*+引用自定义命名
- 引用列表内容、引用对象内容
# 数据的重复引用 # &+自定义命名 = 存储 # *+引用名字 = 引用 # 引用列表内容:标识符号写在需要引用的变量前 # 实例10: # ["method","method"] - &M method # 将method存储在变量M中 - *M # 使用标识符M引用 # 如果写在引用对象method后面则无效 - method &M # method &M整体被视作一个字符串 - *M # 引用对象内容:标识符号可写在冒号之后,方便缩进编写 # 引用对象内容一般把别名写在冒号之后 # 实例11: # ClientA:{name: 张三,age: 18} # VIPClient:{name: 张三,age: 18} clientA: &A # 记得冒号后有一个Space空格 name: 张三 age: 18 VIPclient: *A # 引用时也不要忘记缩进嗷
标签常量
- 整数/浮点数/字符串/Null/日期时间
# 标签常量 # 整数/浮点数/字符串/Null/日期时间 # 实例12: tags: - 5678 # 可以支持2进制、8进制、16进制等等多种格式表示 - 8.8e+3 # 科学计数法:8800 - -.inf # 负无穷 - 'string' # 特别强调是字符串时可以加引号 - ~ # ~ 表示null - 2022-5-8 # 表示日期用-直接连接,保存内容为:"2022-5-8",若要保存时间根据所需要时间格式保存即可
进阶语法
- 强制类型转换
# 强制类型转换 # 用!!强制转换类型 # 实例13: not-date: !!str 2022-5-8 # 由于强制转换为字符串所以保存内容为{"not-date": "2022-5-8"}
- 标量scalar表示法
# 标量scalar表示法 # 独立字符串换行: # yaml语法中换行表示为空格 # 实例14:[曾经沧海难为水, 除却巫山不是云。] - 曾经沧海难为水, 除却巫山不是云。 # yaml语法中空行表示为换行 # 实例15: # [ # 曾经沧海难为水, # 除却巫山不是云。 # ] - 曾经沧海难为水, # 这行要空着才会分行 除却巫山不是云。
- 元素换行
# 对象中元素换行用 | 使对象中所有元素转化为字符串并换行,下列实例不再有列表性质 # 对象中元素换行用 > 使对象中所有元素转化为字符串并在字符串最后换行,下列实例不再有列表性质 # 实例16: Client: | - A - B # 保存内容:{ "Client": "- A\n- B\n"} # 实例: Client: > - A - B # 保存内容:{"Client": "- A - B\n"}
结语
“以上为yaml数据格式常用的所有内容,如想了解更多底层原理,点击下方官网自行阅读。”
如有读者发现文章有错误或者不清楚的地方,欢迎评论、私信交流!
官方文档参考链接:
💗 “南风拂星底,爱意随风起,扶摇而上——九万里。”
——Created By 是羽十八ya