遇一山,过一山,处处有风景;只要勇敢向前,一路尽是繁花盛开。 | (点击查看→)【测试干货】python/java自动化、持续集成、性能、测开、简历、笔试面试等

一文搞懂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"
  }
}

 

 

【bak】

 

posted @ 2021-10-22 06:52  全栈测试笔记  阅读(3488)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end