当前位置:   article > 正文

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

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. 字符串

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

2. 数字

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

3.布尔值

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

4.列表

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

5.字典

  • 语法规范:使用冒号(:)表示键值对,键值对之间使用空格进行分隔。
  1. person:
  2. name: "John"
  3. 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
  1. name: "John"
  2. addr: "长沙"
  3. age: 18
  4. status: null
  5. isStudent: true
  6. fruits:
  7. - apple
  8. - banana
  9. - orange
  10. teacher:
  11. name: "Alex"
  12. age: 30
  • 第二步:使用python读取yaml中的数据
  1. import yaml
  2. with open(file="d.yaml", mode="r",encoding='utf-8') as f:
  3. res = yaml.safe_load(f)
  4. print(res)
  • yaml.safe_load()方法:读取YAML文件中的数据。yaml.safe_load()方法参数是文件对象
  • 运行结果:会自动将yaml中的数据转为python所支持的数据类型

 

2.python将数据写入yaml文件

  • 第一步:将python指定的变量值写入yaml文件中
  1. import yaml
  2. data = {
  3. "Person": {
  4. "name": "John",
  5. "age": 30,
  6. "address": {
  7. "street": "123 Main St",
  8. "city": "Anytown",
  9. "state": "CA"
  10. }
  11. }
  12. }
  13. # 将data变量存储的数据写入YAML文件
  14. with open(file="example.yaml", mode="w") as f:
  15. yaml.dump(data, f)
  • yaml.dump()方法:将数据写入到yaml文件中。yaml.dump()方法的第一个参数是写入数据,第二个参数是文件对象。
  • 第二步:查看example.yaml中的显示

 

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

  • KDT(Keyword-Driven Testing):关键字驱动测试的英文简称。
  1. yaml数据准备
  1. # 访问页面
  2. - action: goto
  3. params:
  4. url: 'https://www.baidu.com'
  5. # 输入python
  6. - action: sendkeys
  7. params:
  8. locator: ['id','kw']
  9. value: 'python'
  10. # 点击搜索按钮
  11. - action: click
  12. params:
  13. locator: ['id','su']
  14. # 断言
  15. - action: assert_text_contains
  16. params:
  17. locator: ['id','content_left']
  18. excepted: 'python'
  1. basepage方法封装
  1. from selenium.webdriver import Chrome,ActionChains
  2. class BasePage:
  3. def __init__(self,driver:Chrome):
  4. self.driver = driver
  5. def goto(self,url):
  6. '''打开网址'''
  7. self.driver.get(url)
  8. def click(self,locator):
  9. '''点击操作'''
  10. el = self.driver.find_element(*locator)
  11. try:
  12. el.click()
  13. except:
  14. ActionChains(self.driver).click(el).perform()
  15. def sendkeys(self,value,locator=None):
  16. '''发送文本操作'''
  17. if locator:
  18. # 相当于ActionChains中的send_keys_to_element(ele,value),先做点击,再做文本输入
  19. el = self.driver.find_element(*locator)
  20. el.send_keys(value)
  21. else:
  22. ActionChains(self.driver).send_keys(value).perform()
  23. def assert_text_contains(self,locator,excepted):
  24. '''断言文本是否包含指定的内容'''
  25. el = self.driver.find_element(*locator)
  26. assert excepted in el.text
  1. 测试用例编写---实现关键字驱动测试
  1. import time
  2. import yaml
  3. from selenium import webdriver
  4. from basepage import BasePage
  5. # 1、读取yaml文件中的数据
  6. with open(file='test_keyword.yaml',mode='r',encoding='utf-8') as f:
  7. data = yaml.safe_load(f)
  8. # 2、测试用例编写
  9. def test_01():
  10. # 初始化浏览器操作
  11. driver = webdriver.Chrome()
  12. driver.implicitly_wait(10)
  13. driver.maximize_window()
  14. # 实例化BasePage的对象
  15. basepage = BasePage(driver)
  16. # 遍历读取到的data数据
  17. for step in data:
  18. # 获取动作名称
  19. method_name = step['action']
  20. # 获取参数
  21. params = step['params']
  22. # 获取类中方法名
  23. method = getattr(basepage, method_name)
  24. # 调用方法,输入参数
  25. method(**params) # 字典解包
  26. time.sleep(2)
  27. driver.quit()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/90575
推荐阅读
相关标签
  

闽ICP备14008679号