深入解析 YAML 配置文件:从语法到最佳实践

2024-01-24

一、认识YAML

  • YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化语言。它的设计目标是使数据在不同编程语言之间交换和共享变得简单。YAML采用了一种简洁、直观的语法,以易于阅读和编写的方式表示数据结构。
  • YAML广泛应用于配置文件、数据序列化、API设计和许多其他领域。它被许多编程语言和框架所支持,包括Python、Java、Ruby等。在Python中,可以使用PyYAML库来读取和写入YAML文件。
  • YAML的优点包括易读性高、易于理解、与多种编程语言兼容以及支持丰富的数据结构。它的简洁语法使得配置文件变得更加直观和可维护。无论是作为配置文件格式还是数据交换格式,YAML都是一个强大而受欢迎的选择。

二、YAML语法规范

YAML的语法特点包括:

  1. 使用缩进表示层级关系,不使用大括号或者其他符号。
  2. 使用冒号来表示键值对。
  3. 支持列表和嵌套结构。
  4. 使用注释以 "#" 开头。
  5. 支持引用和锚点,可以在文档中引用其他部分的数据。

YAML(YAML Ain't Markup Language)支持多种数据类型,包括字符串、数字、布尔值、列表、字典和空值。下面是每种数据类型的示例代码和相应的语法规范:

1. 字符串

  • 语法规范:使用单引号或双引号将字符串括起来。字符串的引号也可以省略
name: "John"
addr: "长沙"

2. 数字

  • 语法规范:直接写入数字即可。
age: 30

3.布尔值

  • 语法规范:使用true表示真,使用false表示假。
isStudent: true
isTeacher: false

4.列表

  • 语法规范:使用短横线(-)表示列表项,列表项之间使用换行进行分隔。
fruits:
    - apple
    - banana
    - orange

5.字典

  • 语法规范:使用冒号(:)表示键值对,键值对之间使用空格进行分隔。
person:
    name: "John"
    age: 30

6. 空值

  • 语法规范:使用null表示空值。
status: null
  • 这些是YAML支持的常见数据类型和相应的示例代码。您可以根据需要使用这些数据类型来构建复杂的数据结构。
  • 注意 : YAML对于缩进非常敏感,使用空格进行缩进来表示层级关系。 缩进的空格数目可以是2个或4个,但在整个文档中必须保持一致。

三、python操作YAML

  • Python提供了pyyaml库来操作YAML文件,操作yaml文件之前,先安装好pyyaml库。
  • 在终端(Pycharm-Terminal)或命令提示符(cmd)中运行以下命令来安装pyyaml库:pip install pyyaml

1.python读取yaml文件

  • 第一步:提前准备好的yaml文件,yaml文件后缀为.yaml或者.yml
name: "John"
addr: "长沙"
age: 18
status: null
isStudent: true
fruits:
    - apple
    - banana
    - orange
teacher:
    name: "Alex"
    age: 30
  • 第二步:使用python读取yaml中的数据
import yaml

with open(file="d.yaml", mode="r",encoding='utf-8') as f:
    res = yaml.safe_load(f)
print(res)
  • yaml.safe_load()方法:读取YAML文件中的数据。yaml.safe_load()方法参数是文件对象
  • 运行结果: 会自动将yaml中的数据转为python所支持的数据类型

2.python将数据写入yaml文件

  • 第一步:将python指定的变量值写入yaml文件中
import yaml

data = {
    "Person": {
        "name": "John",
        "age": 30,
        "address": {
            "street": "123 Main St",
            "city": "Anytown",
            "state": "CA"
        }
    }
}
# 将data变量存储的数据写入YAML文件
with open(file="example.yaml", mode="w") as f:
    yaml.dump(data, f)
  • yaml.dump()方法:将数据写入到yaml文件中。yaml.dump()方法的第一个参数是写入数据,第二个参数是文件对象。
  • 第二步:查看example.yaml中的显示

四、YAML结合UI自动化实现KDT

  • KDT(Keyword-Driven Testing):关键字驱动测试的英文简称。
  1. yaml数据准备
# 访问页面
- action: goto
  params:
    url: 'https://www.baidu.com'
# 输入python
- action: sendkeys
  params:
    locator: ['id','kw']
    value: 'python'
# 点击搜索按钮
- action: click
  params:
    locator: ['id','su']
# 断言
- action: assert_text_contains
  params:
    locator: ['id','content_left']
    excepted: 'python'
  1. basepage方法封装
from selenium.webdriver import Chrome,ActionChains

class BasePage:
    def __init__(self,driver:Chrome):
        self.driver = driver

    def goto(self,url):
        '''打开网址'''
        self.driver.get(url)

    def click(self,locator):
        '''点击操作'''
        el = self.driver.find_element(*locator)
        try:
            el.click()
        except:
            ActionChains(self.driver).click(el).perform()

    def sendkeys(self,value,locator=None):
        '''发送文本操作'''
        if locator:
            # 相当于ActionChains中的send_keys_to_element(ele,value),先做点击,再做文本输入
            el = self.driver.find_element(*locator)
            el.send_keys(value)
        else:
            ActionChains(self.driver).send_keys(value).perform()

    def assert_text_contains(self,locator,excepted):
        '''断言文本是否包含指定的内容'''
        el = self.driver.find_element(*locator)
        assert excepted in el.text
  1. 测试用例编写---实现关键字驱动测试
import time
import yaml
from selenium import webdriver
from basepage import BasePage

# 1、读取yaml文件中的数据
with open(file='test_keyword.yaml',mode='r',encoding='utf-8') as f:
    data = yaml.safe_load(f)

# 2、测试用例编写
def test_01():
    # 初始化浏览器操作
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    driver.maximize_window()
    # 实例化BasePage的对象
    basepage = BasePage(driver)
    # 遍历读取到的data数据
    for step in data:
        # 获取动作名称
        method_name = step['action']
        # 获取参数
        params = step['params']
        # 获取类中方法名
        method = getattr(basepage, method_name)
        # 调用方法,输入参数
        method(**params)  # 字典解包
    time.sleep(2)
    driver.quit()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入解析 YAML 配置文件:从语法到最佳实践 的相关文章

随机推荐

  • 软件测试/测试开发|给你剖析闭包与装饰器的魔力

    测试管理班是专门面向测试与质量管理人员的一门课程 通过提升从业人员的团队管理 项目管理 绩效管理 沟通管理等方面的能力 使测试管理人员可以更好的带领团队 项目以及公司获得更快的成长 提供 1v1 私教指导 BAT 级别的测试管理大咖量身打造
  • Vue中下载不同文件常用的方式

    1 使用window open方法下载文件
  • Making Large Language Models Perform Better in Knowledge Graph Completion论文阅读

    文章目录 摘要 1 问题的提出 引出当前研究的不足与问题 KGC方法 LLM幻觉现象 解决方案 2 数据集和模型构建
  • 题解 | #每个创作者每月的涨粉率及截止当前的总粉丝量#

    提前实习把工作实习没了 提前实习把工作实习没了 提前实习把工作实习没了 学校导师个人主页挂了我的牛客经验贴 接一下自己去年的好运 求求oc真的磕头了 来个offer 明天发offer 心想事成 跨行 转技术岗进大厂的好机会 来看 up 提前
  • 带你读论文第四期:顶会文章来了!来听山东大学博士怎么提升MLLMs

    Datawhale干货 来源 WhalePaper 负责人 芙蕖 WhalePaper简介 由 Datawhale团队成员 发起 对目前学术论文中比较成熟的 Topic 和开源方案进行分享 通过一起阅读 分享论文学习的方式帮助大家 更好地
  • 题解 | #单链表的排序——c语言版本的归并排序#

    姗姗来迟的2023年度总结 华为纯纯恶心 许愿贴 许愿贴 希望兴业总行早日发起面试 求求兴业总行早日给我个offer 1月请赐我力量 许愿 求offer 成功上岸 26届简历求锐评 今年就到大二下了 最近也有按照自己的安排投简历 面试了几次
  • 光波导结构

    摘要 增强现实和混合现实 AR MR 领域的新应用引起了人们对带有光栅区域的光波导系统的越来越多的关注 这些光波导系统用于输入和输出耦合以及扩瞳目的 VirtualLab Fusion为这类系统的仿真和设计提供了几个强大的工具 其中一个是具
  • 【安全】mybatis中#{}和${}导致sql注入问题及解决办法

    0 问题 使用mybatis的时候遇到了 和 可能导致sql注入的问题 1 预先了解 1 底层通过prepareStatement对当前传入的sql进行了预编译 一个 被解析为一个参数占位符 解析之后会将String类型的数据自动加上引号
  • 【方法】如何把Excel“只读方式”变成可直接编辑?

    Excel在 只读方式 下 编辑后是无法直接保存原文件的 那如何可以直接编辑原文件呢 下面来一起看看看吧 如果Excel设置的是无密码的 只读方式 那在打开Excel后 会出现对话框 提示 是否以只读方式打开 如果想直接编辑文件 选择 否
  • 12. openCV在QT环境中利用zBar开发库实现二维码内容识别

    1 说明 本篇博客仅记录如何使用zBar库进行二维码内容的识别 其中牵扯到的一些其它知识点 比如二维码区域检测 zBar库开发环境配置等可以参考本专栏的其它相关博客 此篇博客不再赘述 2 具体步骤 博客中代码功能 手动选择一张包含二维码的图
  • SpringCloud Config分布式配置中心

    文章目录 代码地址 简介 与GitHub整合配置 项目整合 测试 Config客户端配置与测试 测试 Config客户端之动态刷新 测试
  • 共享类变量的解决方案

    在面向对象编程中 类变量通常用于存储与类相关的信息 例如静态属性或常量 然而 当多个类需要访问共享的变量时 可能遇到共享类变量的挑战 解决方案 以下是一些共享类变量的解决方案 1 使用全局变量 将共享变量定义为全局变量 可以在所有类中访问
  • 【安全】Java幂等性校验解决重复点击(6种实现方式)

    目录 一 简介 1 1 什么是幂等 1 2 为什么需要幂等性 1 3 接口超时 应该如何处理 1 4 幂等性对系统的影响 二 Restful API 接口的幂等性 三 实现方式 3 1 数据库层面 主键 唯一索引冲突 3 2 数据库层面 乐
  • 计算机Java项目|人体健康信息管理系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 对中国手机作恶的谷歌,印度CEO先后向三星和苹果低头求饶

    日前苹果与谷歌宣布合作 发布了 Find My Device Network 的草案 旨在规范蓝牙追踪器的使用 在以往苹果和谷歌的生态形成鲜明的壁垒 各走各路 如今双方竟然达成合作 发生了什么事 首先是谷歌安卓系统的市场份额显著下滑 数年来
  • 【学习分享】全志平台TWI子系统源码分析(1)从设备树到寄存器

    全志平台TWI子系统源码分析 1 从设备树到寄存器 前言 一 名词解释 二 从设备树入手看源码 1 TWI设备树 2 TWI源码位置 3 TWI总线相关寄存器 总结 前言 这次开坑主要是想把全志平台TWI子系统在源
  • 2024免费mathtype7.4.4安装注册步骤教程

    数学建模中对公式的编辑有很高的要求 mathtype是一款专业的数学公式编辑工具 能够帮助用户在各种文档中插入复杂的数学公式和符号 一 Mathtype 的下载安装 1 1 安装前须知 解压和安装前 需要将电脑的杀毒软件或者防火墙关掉 如发
  • Java进阶之旅第七天

    Java进阶之旅第七天 文章目录 Java进阶之旅第七天 方法引用 介绍 代码展示 结果 方法引用的分类
  • 高中数学:不等式(初接高)

    1 二次不等式 2 分式不等式 最后的例题 是为了说明第三种情况 就是 不等号右边不为0时 要先进行移项操作 将右边化为0 这样 就转化成1 2两种情况了 3 其它复杂不等式 3 1 高次不等式 3 2 绝对值不等式 3 3 根式不等式 补
  • 深入解析 YAML 配置文件:从语法到最佳实践

    一 认识YAML YAML YAML Ain t Markup Language 是一种人类可读的数据序列化语言 它的设计目标是使数据在不同编程语言之间交换和共享变得简单 YAML采用了一种简洁 直观的语法 以易于阅读和编写的方式表示数据结