一文搞懂yaml
简介
YAML(/ˈjæməl/)是一个可读性高,用来表达数据序列化的格式,它非常简洁和强大,比 JSON 格式方便。
YAML,也可以叫做YML。
基本语法
1、yml文件以缩进代表层级关系 2、缩进不允许使用tab,只能使用空格 3、缩进空格的个数不重要,只要相同层级的元素左对齐即可 4、大小写敏感 5、数据格式为,名称:(空格)值 也就是说,如果冒号后面有值,冒号后面必须要有空格。 另外,-后面也必须要有空格。 6、# 表示注释, 从这个字符一直到行尾,都会被解析器忽略 7、--- 表示分段,在同一个yaml文件中,可以用 --- 来分段,这样可以将多个文档写在一个文件中
支持的数据结构
纯量:最基本的、单个的、不可再分的值
字符串
默认不需要加引号,如果包含空格或特殊字符就必须加引号,单引号或双引号都可以
name: ren addres: "guangdong guangzhou"
对应的json是:
{
"name": "ren",
"addres": "guangdong guangzhou"
}
补充:
${}是YAML中的特殊字符,用于表示变量或参数的占位符,通常在模板语言中用来表示动态的内容,
在YAML文件中,可以使用${}来引用变量或参数,这些变量或参数可以在运行时被替换为实际的值。
所以,如果值中有${}就需要加引号;
#用于注释,从这个字符一直到行尾,都会被解析器忽略
双引号不会对特殊字符转义,单引号会对特殊字符转义
str1: '你好\n韧' str2: "你好\n韧"
对应的json是:
{
"str1": "你好\\n韧",
"str2": "你好\n韧"
}
单引号之中如果还有单引号,必须连续使用两个单引号转义
str: 'today''s sunday'
对应的json是:
{
"str": "today's sunday"
}
字符串可以写成多行,从第二行开始,必须有一个单空格缩进,换行符会被转为空格
str: today's sundy
对应的json是:
{
"str": "today's sundy"
}
str: today is sundy
对应的json是:
{
"str": "today is sundy"
}
布尔
布尔值用true和false表示
success: true
对应的json是:
{
"success": true
}
整数
数值直接以字面量的形式表示
age: 22
对应的json是:
{
"age": 22
}
浮点数
数值直接以字面量的形式表示
height: 185.5
对应的json是:
{
"height": 185.5
}
null:null用~表示
job: ~
对应的json是:
{
"job": null
}
YAML 允许使用两个感叹号,强制转换数据类型
age: !!str 18 success: !!str true
对应的json是:
{
"age": "18",
"success": "true"
}
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
对象的一组键值对,使用冒号结构表示
非行内对象
{name: 韧, age: 18}
也可以写为:
name: 韧 age: 18
对应的json是:
{
"name": "韧",
"age": 18
}
行内对象
tester: {name: 韧, age: 18}
也可以写为:
tester: name: 韧 age: 18
对应的json是:
{
"tester": {
"name": "韧",
"age": 18
}
}
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
非行内数组
[韧, qzcsbj]
也可以写为:
- 韧 - qzcsbj
对应的json是:
[ "韧", "qzcsbj" ]
行内数组
testerList: [韧, qzcsbj]
也可以写为:-可以有缩进
testerList: - 韧 - qzcsbj
也可以写为:-也可以不缩进
testerList: - 韧 - qzcsbj
对应的json是:
{
"testerList": [
"韧",
"qzcsbj"
]
}
复合结构
对象和数组可以结合使用,形成复合结构。
总之,冒号表示k-v,每一个-表示列表的一个元素
例如下面测试用例数据:

格式在线校验、转换
如果不知道yaml写得对不对,可以做一下格式校验
https://www.bejson.com/validators/yaml_editor/
自动化测试用例数据存yaml
---
- caseId: 1
apiName: register
describe: 注册
url: /qzcsbj/user/register
requestType: post
headers: {'Content-Type':'application/json'}
cookies:
parameters: {"username":"#{username}","password":"#{password_correct}","realName":"#{username}","sex":"1","birthday":"1990-06-16","phone":"13500000006","utype":"1","adduser":"#{username}"}
uploadFile:
initSql: [{"sqlNo":"1","sql":"delete from user where username = '#{username}';"}]
globalVariables:
assertFields: $.msg=注册成功;
- CaseId: 2
ApiName: login
Describe: 登录
Url: /qzcsbj/user/login
RequestType: post
Headers: {"Content-Type":"application/json"}
Cookies:
Parameters: {"username":"#{username}", "password":"#{password_correct}"}
UploadFile:
InitSql:
GlobalVariables: token=$.data.token;
AssertFields: $.msg=登录成功;

https://www.bejson.com/json/json2yaml/
k8s资源yaml文件
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- name: busybox
image: busybox:1.34
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
restartPolicy: Always
对应json
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"name": "busybox",
"namespace": "default"
},
"spec": {
"containers": [
{
"name": "busybox",
"image": "busybox:1.34",
"command": [
"sleep",
"3600"
],
"imagePullPolicy": "IfNotPresent"
}
],
"restartPolicy": "Always"
}
}

__EOF__
本文作者:持之以恒(韧)
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!

浙公网安备 33010602011771号