接口自动化测试框架 - 3-1配置文件yaml使用

1. Yaml 介绍及安装

  • Yaml 介绍

    ​ Yaml 是一种所有编程语言可用的友好的数据序列化标准。语法和其他高阶语言类似,并且可以简单表达字典、列表和其他基本数据类型的形态。语法规则如下:

    1. 大小写敏感。
    2. 使用缩进表示层级关系。
    3. 使用空格键缩进,而非Tab键缩进
    4. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可。
    5. 文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;
    6. 注释标识为#
    • 官网:https://yaml.org/
  • Yaml 安装

    $ pip3 install PyYaml
    
  • Yaml 快速体验

    • 字典{"name": "test_yaml", "result", "success"}写成Yaml的形式,并输出结果

      结构通过空格缩进来展示。列表里的项用"-“来代表,字典里的键值对用”:"分隔.

    • 示例函数:

      data.yaml

      name: "test_yaml"
      result: "success"
      

      demo.py

      import yaml
      
      with open("./data.yaml",'r') as f:
      		data = yaml.safe_load(f)
      		print(data)
      
    • 运行结果

      {'name': 'test_yaml', 'result': 'success'}
      

2 .Yaml 字典和列表介绍

2.1 字典

  • 字典里的键值对用":"分隔.

示例{"name": "test_yaml", "result", "success"}

name: "test_yaml"
age: "success"

总结:

  • 字典直接写key和value,每一个键值对占一行。
  • : 后面要有空格

2.2 列表

  • 一组按序排列的值(简称 “序列或列表”)
  • 数组前加有 “-” 符号,符号与值之间需用空格分隔

示例["a", "b", "c"]

- "a"
- "b"
- "c"
  • 列表中的元素需要用 -来表示
  • 每一个元素前面都有一个 -,后面接元素内容

3 Yaml 字典和列表基本操作

3.1 字典嵌套字典
  • 需求

    {
    	person1: {
    		"name": "xiaoming",
    		"age": "18"
    	},
    	person2: {
    		"name": "xiaohong",
    		"age": "20"
    	}
    }
    
  • 示例

    person1:
      name: "xiaoming"
      age: "18"
    person2:
      name: "xiaohong"
      age: "20"
    
  • 结果

    {'person1': {'name': 'xiaoming', 'age': '18'}, 'person2': {'name': 'xiaohong', 'age': '20'}}
    
3.2 字典嵌套列表
  • 需求

    {person: ["1", "2", "3"]}
    
  • 示例

    persion:
    - "1"
    - "2"
    - "3"
    
  • 结果

    {'person': ['1', '2', '3']}
    
3.3 列表嵌套字典
  • 需求

    [{
    	"username1": "test1"
    }, {
    	"password1": "111",
    	"username2": "test2",
    	"password2": "222"
    }]
    
  • 示例

    - username1: "test1"
    - password1: "111"
      username2: "test2"
      password2: "222"
    
  • 结果

    [{'username1': 'test1'}, {'password1': 111, 'username2': 'test2', 'password2': 222}]
    
3.4 列表嵌套列表
  • 需求

    [["a","b","c"],["1","2","3"]]
    
  • 示例

    -
     - "a"
     - "b"
     - "c"
    -
     - "1"
     - "2"
     - "3"
    
  • 结果

    [['a', 'b', 'c'], [1, 2, 3]]
    

注意:

  • pycharm会自动将yaml中的tab转化成空格。但是不能复制”tab键“,不会进行转化。
  • 同级别左侧必须要对齐,少个空格无所谓。

4 读取 Yaml 文件

4.1 读取单个Yaml文档
  • yaml文档

    #data.yaml
    "用户名称": "test123"
    "密码": "123456"
    
  • 示例函数:demo.py 中文问题(windows): encoding=‘utf-8’

    import yaml
    # 打开要读取的文件,中文 encoding='utf-8'
    with open("./data.yaml", 'r', encoding='utf-8') ) as f:
    	# 加载文件内容
    	data = yaml.safe_load(f)
    	# 打印结果
    	print(data)
    

    读取实际上就是先使用 with open 的形式获取文件对象,再使用 yaml 中的 load 方法加载这个文件对象,通过过load方法,一个字符串变成了一个字典

  • 结果

    {'用户名称': 'test123', '密码': '123456'}
    
4.2 读取多个Yaml文档

​ 多个文档在一个yaml文件,使用 — 分隔方式来分段

  • yaml文档

  • ---
    "用户名称1": "test123"
    "密码": "123456"
    ---
    "用户名称2": "test456"
    "密码": "123456"
    
  • 示例

  • import yaml
    
    with open("./data.yaml",'r') as f:
    	data = yaml.safe_load_all(f)
    	for i in data:
    		print(i)
    
  • 结果

  • {'用户名称1': 'test123', '密码': '123456'}
    {'用户名称2': 'test456', '密码': '123456'}
    

5 yaml封装

import os
import yaml
#1、创建类
class YamlReader:
#2、初始化,文件是否存在
    def __init__(self,yamlf):
        if os.path.exists(yamlf):
            self.yamlf = yamlf
        else:
            raise FileNotFoundError("文件不存在")
        self._data = None
        self._data_all = None
#3、yaml读取
    #单个文档读取
    def data(self):
        #第一次调用data,读取yaml文档,如果不是,直接返回之前保存的数据
        if not self._data:
            with open(self.yamlf,"rb") as f:
                self._data = yaml.safe_load(f)
        return self._data
    #多个文档读取
    def data_all(self):
        #第一次调用data,读取yaml文档,如果不是,直接返回之前保存的数据
        if not self._data_all:
            with open(self.yamlf,"rb") as f:
                self._data_all = list(yaml.safe_load_all(f))
        return self._data_all

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值