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

简介: 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]是一串字符串而不是列表

        image.gif


        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

              image.gif


              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

                image.gif


                复杂的多值映射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都有比赛
                  # 在这个例子中,问号下每一个元素,都对应着冒号中三个值

                  image.gif


                  文档分割

                  • ---表示一个文档的开始(只有一个文档时可不写)
                  • ...表示一个文档的结束(如果有---表示一个新文档的开始,则...可省略,规范写法需要...)


                  # 文档分割
                  # ---表示一个文档的开始(只有一个文档时可不写)
                  # ...表示一个文档的结束(如果有---表示一个新文档的开始,则...可省略,规范写法需要...)
                  # 一个文档中有两个子文档login和data实例:
                  # 实例9:
                  # 这是第一个子文档login
                  ---
                  -A
                  -B
                  -C
                  ...
                  # 这是第二个子文档data
                  ---
                  -dataA
                  -dataB
                  -dataC
                  ...
                  # 上述表示一个文档被分割为两个子文档

                  image.gif


                  数据的重复引用

                    • 存储:&+自定义命名
                    • 引用:*+引用自定义命名
                    • 引用列表内容、引用对象内容
                    # 数据的重复引用
                    # &+自定义命名 = 存储
                    # *+引用名字 = 引用
                    # 引用列表内容:标识符号写在需要引用的变量前
                    # 实例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  # 引用时也不要忘记缩进嗷

                    image.gif


                    标签常量

                      • 整数/浮点数/字符串/Null/日期时间


                      # 标签常量
                      # 整数/浮点数/字符串/Null/日期时间
                      # 实例12:
                      tags:
                        - 5678  # 可以支持2进制、8进制、16进制等等多种格式表示
                        - 8.8e+3  # 科学计数法:8800
                        - -.inf # 负无穷
                        - 'string' # 特别强调是字符串时可以加引号
                        - ~  # ~ 表示null
                        - 2022-5-8  # 表示日期用-直接连接,保存内容为:"2022-5-8",若要保存时间根据所需要时间格式保存即可

                      image.gif


                      进阶语法

                      • 强制类型转换


                      # 强制类型转换
                      # 用!!强制转换类型
                      # 实例13:
                      not-date: !!str 2022-5-8  # 由于强制转换为字符串所以保存内容为{"not-date": "2022-5-8"}

                      image.gif

                        • 标量scalar表示法


                        # 标量scalar表示法
                        # 独立字符串换行:
                        # yaml语法中换行表示为空格
                        # 实例14:[曾经沧海难为水, 除却巫山不是云。]
                        -
                          曾经沧海难为水,
                          除却巫山不是云。
                        # yaml语法中空行表示为换行
                        # 实例15:
                        #  [
                        #  曾经沧海难为水,
                        #  除却巫山不是云。
                        #  ]
                        -
                          曾经沧海难为水,
                          # 这行要空着才会分行
                          除却巫山不是云。

                        image.gif

                        • 元素换行


                        # 对象中元素换行用 | 使对象中所有元素转化为字符串并换行,下列实例不再有列表性质
                        # 对象中元素换行用 > 使对象中所有元素转化为字符串并在字符串最后换行,下列实例不再有列表性质
                        # 实例16:
                        Client: |
                          - A
                          - B
                        # 保存内容:{ "Client": "- A\n- B\n"}
                        # 实例:
                        Client: >
                          - A
                          - B
                        # 保存内容:{"Client": "- A - B\n"}

                        image.gif


                        结语

                        “以上为yaml数据格式常用的所有内容,如想了解更多底层原理,点击下方官网自行阅读。”

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

                        官方文档参考链接:


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

                                                                                       ——Created By 是羽十八ya


                        相关文章
                        |
                        2天前
                        |
                        数据采集 前端开发 测试技术
                        《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外篇(详解教程)
                        【4月更文挑战第23天】本文介绍了网页中的滑动验证码的实现原理和自动化测试方法。作者首先提到了网站的反爬虫机制,并表示在本地创建一个没有该机制的网页,然后使用谷歌浏览器进行验证。接着,文章详细讲解了如何使用WebElement的click()方法以及Action类提供的API来模拟鼠标的各种操作,如右击、双击、悬停和拖动。
                        6 2
                        |
                        3天前
                        |
                        Web App开发 数据采集 Java
                        《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)
                        【4月更文挑战第22天】本文介绍了在测试过程中可能会用到的两个功能:Actions类中的拖拽操作和划取字段操作。拖拽操作包括基本讲解、项目实战、代码设计和参考代码,涉及到鼠标按住元素并将其拖动到另一个元素上或指定位置。划取字段操作则介绍了如何在一段文字中随机选取一部分,包括项目实战、代码设计和参考代码。此外,文章还提到了滑动验证的实现,并提供了相关的代码示例。
                        32 2
                        |
                        8天前
                        |
                        前端开发 JavaScript Java
                        《手把手教你》系列技巧篇(二十五)-java+ selenium自动化测试-FluentWait(详细教程)
                        【4月更文挑战第17天】其实今天介绍也讲解的也是一种等待的方法,有些童鞋或者小伙伴们会问宏哥,这也是一种等待方法,为什么不在上一篇文章中竹筒倒豆子一股脑的全部说完,反而又在这里单独写了一篇。那是因为这个比较重要,所以宏哥专门为她量身定制了一篇。FluentWait是Selenium中功能强大的一种等待方式,翻译成中文是流畅等待的意思。在介绍FluentWait之前,我们来讨论下为什么需要设置等待,我们前面介绍了隐式等待和显式等待。
                        34 3
                        |
                        10天前
                        |
                        Java 测试技术 定位技术
                        《手把手教你》系列技巧篇(二十三)-java+ selenium自动化测试-webdriver处理浏览器多窗口切换下卷(详细教程)
                        【4月更文挑战第15天】本文介绍了如何使用Selenium进行浏览器窗口切换以操作不同页面元素。首先,获取浏览器窗口句柄有两种方法:获取所有窗口句柄的集合和获取当前窗口句柄。然后,通过`switchTo().window()`方法切换到目标窗口句柄。在项目实战部分,给出了一个示例,展示了在百度首页、新闻页面和地图页面之间切换并输入文字的操作。最后,文章还探讨了在某些情况下可能出现的问题,并提供了一个简单的本地HTML页面示例来演示窗口切换的正确操作。
                        38 0
                        |
                        13天前
                        |
                        前端开发 JavaScript Java
                        《手把手教你》系列技巧篇(十九)-java+ selenium自动化测试-元素定位大法之By css下卷(详细教程)
                        【4月更文挑战第11天】按计划今天宏哥继续讲解css的定位元素的方法。但是今天最后一种宏哥介绍给大家,了解就可以了,因为实际中很少用。
                        35 2
                        |
                        15天前
                        |
                        前端开发 JavaScript Java
                        《手把手教你》系列技巧篇(十八)-java+ selenium自动化测试-元素定位大法之By css中卷(详细教程)
                        【4月更文挑战第10天】本文主要介绍了CSS定位元素的几种方法,包括ID属性值定位、其他属性值定位和使用属性值的一部分定位。作者提供了示例代码,展示了如何使用这些方法在Java+Selenium自动化测试中定位网页元素。通过CSS选择器,可以更精确地找到页面上的特定元素,如输入框、按钮等,并进行相应的操作,如输入文本、点击等。文章还提供了实际运行代码后的控制台输出和浏览器动作的示例。
                        50 0
                        |
                        16天前
                        |
                        前端开发 JavaScript Java
                        《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css上卷(详细教程)
                        【4月更文挑战第9天】本文介绍了CSS定位方式的使用,包括它的优势和8种常用的定位方法。CSS定位相比XPath定位更快、更稳定。文章通过示例详细讲解了如何使用CSS定位元素,包括通过id、name、class name、tag name、link text、partial link text以及XPath进行定位。还提供了Java代码示例来演示如何在自动化测试中使用这些定位方法。
                        41 1
                        |
                        3天前
                        |
                        测试技术 API 网络架构
                        Python的api自动化测试 编写测试用例
                        【4月更文挑战第18天】使用Python进行API自动化测试,可以结合`requests`库发送HTTP请求和`unittest`(或`pytest`)编写测试用例。以下示例: 1. 安装必要库:`pip install requests unittest` 2. 创建`test_api.py`,导入库,定义基础URL。 3. 创建继承自`unittest.TestCase`的测试类,包含`setUp`和`tearDown`方法。 4. 编写测试用例,如`test_get_users`,检查响应状态码和内容。 5. 运行测试:`python -m unittest test_api.py`
                        12 2
                        |
                        3天前
                        |
                        JSON 测试技术 API
                        Python的Api自动化测试使用HTTP客户端库发送请求
                        【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
                        9 3
                        |
                        4天前
                        |
                        测试技术 持续交付 API
                        Python的UI自动化测试
                        【4月更文挑战第17天】Python UI自动化测试涉及Selenium(Web)、Appium(移动应用)和PyQt(桌面应用)等框架。基本步骤包括确定测试目标、选择合适框架、安装配置、编写测试脚本、运行调试以及集成到CI/CD流程。注意自动化测试不能完全取代人工测试,应根据需求平衡使用。
                        8 1