YAML 深入解析:从语法到最佳实践

什么是YAML

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

YAML广泛应用于配置文件、数据序列化、API设计和许多其他领域。它被许多编程语言和框架所支持,包括Python、Java、Ruby等。在Python中,可以使用PyYAML库来读取和写入YAML文件。

YAML的优点包括易读性高、易于理解、与多种编程语言兼容以及支持丰富的数据结构。它的简洁语法使得配置文件变得更加直观和可维护。无论是作为配置文件格式还是数据交换格式,YAML都是一个强大而受欢迎的选择。

YAML语法规范

YAML的语法特点包括:

使用缩进表示层级关系,不使用大括号或者其他符号。

使用冒号来表示键值对。

支持列表和嵌套结构。

使用注释以 “#” 开头。

支持引用和锚点,可以在文档中引用其他部分的数据。

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

字符串
语法规范:使用单引号或双引号将字符串括起来。字符串的引号也可以省略

name: "John"
addr: "长沙"
  1. 数字

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

age: 30
  1. 布尔值

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

isStudent: true
isTeacher: false
  1. 列表

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

fruits:- apple- banana- orange
  1. 字典

语法规范:使用冒号(:)表示键值对,键值对之间使用空格进行分隔。

person:name: "John"age: 30
  1. 空值

语法规范:使用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数据准备

在这里插入图片描述

2.basepage方法封装

from selenium.webdriver import Chrome,ActionChainsclass BasePage:def __init__(self,driver:Chrome):self.driver = driverdef 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

3.测试用例编写—实现关键字驱动测试

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()

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/211459.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux加强篇001-部署Linux系统

目录 一、前言 1.1准备工具 1.2安装配置VM虚拟机 1.3安装软件 1.4系统初始化进程 1.5重置root密码 二、巩固练习 1.为什么建议读者在下载系统文件后先进行校验而不是直接安装呢? 2.使用虚拟机安装Linux系统时,为什么要先…

管理类联考——英语二——备考 100 句涵盖所有词汇

全中 在海里的这个地区,熊猫们喜欢就着苏打碗豆喝茶。而大洋州的民兵则喜欢经过半岛,带着编剧本的公式上餐厅去。附件的电影院里有额外的歌剧和香蕉,这一时代的斑马们被外面的天线所吸引。实验室里的蟹想用它的肋骨去戳四肢象灯炮的小羊。但…

完美解决:Nginx访问PHP出现File not found.

目录 解决方法一: 解决方法二: 遇到 File not found. 出现的问题解决: 解决方法一: 修改nginx的主配置文件。 vi /etc/nginx/nginx.conf location ~ \.php$ { root html; fastcgi_pass …

C语言——从键盘输人三角形的三个边长 a、b、c,求出三角形的面积。

从键盘输人三角形的三个边长 a、b、c,求出三角形的面积。求三角形的面积用公式areasqrt(s*(s-a)*(s-b)*(s-c)),其中 s1/2(a十bc)。注:要求对输人三角形的三个边长做出有效性判断。 #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> #include<math.h> int main…

5.1 PBR基础 BRDF介绍

基于物理的渲染&#xff08;Physically Based Rendering&#xff0c;PBR&#xff09;是指使用基于物理原理和微平面理论建模的着色/光照模型&#xff0c;以及使用从现实中测量的表面参数来准确表示真实世界材质的渲染理念。 一、反射率方程 理论基础放在参考链接里。 直接开始…

Rust开发——数据对象的内存布局

枚举与Sized 数据 一般数据类型的布局是其大小&#xff08;size&#xff09;、对齐方式&#xff08;align&#xff09;及其字段的相对偏移量。 1. 枚举&#xff08;Enum&#xff09;的布局&#xff1a; 枚举类型在内存中的布局通常是由编译器来确定的。不同的编译器可能有不…

香港科技大学广州|先进材料学域博士招生宣讲会—华中科技大学大学专场!!!(暨全额奖学金政策)

“跨学科融合创新&#xff0c;引领新兴与未来行业的突破与发展——先进材料学域” 世界一流的新型可持续材料创新研究 夯实的先进材料领域国际学术影响力 教授亲临现场&#xff0c;面对面答疑解惑助攻申请&#xff01; 一经录取&#xff0c;享全额奖学金1.5万/月&#xff01; …

深入了解接口测试:方法、工具和关键考虑因素(一)

接口测试是软件测试中的一项重要工作&#xff0c;它涉及到系统与系统之间的交互点。接口可以是外部接口&#xff0c;也可以是内部接口&#xff0c;包括上层服务与下层服务接口以及同级接口。在接口测试中&#xff0c;我们需要确保接口能够按照预期的方式进行通信和交互&#xf…

C百题--6.输出C

1.问题描述 输出“C”样式的字符 2.解决思路 1.用printf(&#xff09;逐行输出&#xff1b; 2用循环一部分一部分输出 3.代码实现 #include<stdio.h> int main(){for(int i0;i<5;i){printf("*"); }printf("\n");for(int i0;i<2;i){printf…

Linux进程通信之共享内存

文章目录 共享内存原理申请共享内存函数&#xff08;shmget&#xff09;参数key生成key值示例申请共享内存 挂接到进程地址空间函数(shmat)去关联函数(shmdt)控制共享内存(shmctl)IPC_STATIPC_RMID ipcs其余进程获取该共享内存进程间通信 进程间通信&#xff1a;IPC&#xff0c…

OpenStack云计算平台-镜像服务

目录 一、镜像服务概览 二、安装和配置 1、先决条件 2、安全并配置组件 3、完成安装 三、验证操作 一、镜像服务概览 OpenStack镜像服务是IaaS的核心服务&#xff0c;如同 :ref:get_started_conceptual_architecture所示。它接受磁盘镜像或服务器镜像API请求&#xff0c;…