一文搞懂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__
![微信:ren168632201](https://files-cdn.cnblogs.com/files/uncleyong/wx.bmp)
本文作者:持之以恒(韧)
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(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
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!