16个实例带你玩转yaml数据格式——自动化测试工程师必备yaml教程

是羽十八ya 发表于 2022/05/11 17:44:56 2022/05/11
【摘要】 yaml数据格式可谓是自动化测试领域一颗璀璨的明星,笔者最近正好要用到yaml数据格式,可是笔者始终找不到一个想要的yaml格式教程,于是便奋发图强,攻上yaml官网,钻研苦读最新版本的yaml,写下此篇教程,以供大家更加方便、快速、深入地了解yaml数据格式。

  “ 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数据格式常用的所有内容,如想了解更多底层原理,点击下方官网自行阅读。” 

如有读者发现文章有错误或者不清楚的地方,欢迎评论、私信交流!

官方文档参考链接:https://yaml.org/


💗 “南风拂星底,爱意随风起,扶摇而上——九万里。” 

                                                                ——Created By 是羽十八ya

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。