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

发布于 更新于
本文目录
  1. 一、认识YAML
  2. 二、YAML语法规范
  3. 1. 字符串
  4. 2. 数字
  5. 3.布尔值
  6. 4.列表
  7. 5.字典
  8. 6. 空值
  9. 三、python操作YAML
  10. 1.python读取yaml文件
  11. 2.python将数据写入yaml文件
  12. 四、YAML结合UI自动化实现KDT

技术文章自动化测试

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

一、认识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所支持的数据类型

image.png

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中的显示

image.png

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

来源:testingpai

继续阅读