测试之路 pytest接口自动化框架-yaml数据

2022-12-12 16:40:27 浏览数 (1)

哈喽大家好,我是歪小王。上期内容我们说了requests与封装的好处。本期就接口自动化中另外一个重要成员--yaml数据,做一个简单介绍。

01 简介

yaml是一种文件类型,往细了说,是一种通用的数据序列化格式;它与python中的字典数据类型大致相同。也是遵循key=value(键值对形式)的方式进行数据存储。

以下是度娘简介:

YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans在2001年首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。

YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

yaml是一个多平台的数据格式,文件后缀名以.yaml或.yml命名。根据平台不同,命名不同,python中的后缀名是.yaml

02 语法格式

yaml语法格式:

  • 区分大小写
  • 使用空格缩进表示层级关系。切记不要使用tab缩进。缩进空格数没有规定,按照个人喜好。只要保证字段最左侧对其即可
  • 数据模板是key: value的形式展示。value前面有一个空格。
  • yaml的#开头的表示注释的意思。(与python单行注释一样)

数据类型:yaml支持的数据格式如下

  • 字符串
  • 整形
  • 浮点
  • 布尔
  • 日期
  • 空(null)
  • 数组

上述类型除数组外。其他数据类型无特殊语法格式。只需要输入数据,底层会自动转换类型。

说到数组,在yaml中想定义一个数组,需要在key值前增加一个"-"来表示数组。

示例:

代码语言:javascript复制
- name: 张三
- age: 14

# 输出:[{'name': '张三'}, {'age': 14}]

- name
- age

# 输出:['name', 'age']

使用“-”来标注的数据类型,就会直接转换成Python中列表的形式。yaml中可以灵活运用嵌套规则,形成不同的数据格式:字典嵌套列表,列表嵌套字典等等

锚点

锚点主要作用就是引用公共变量。

语法:

  • ‍设置锚点
    • 使用&锚点名称。可以标注锚点
  • 引用锚点
    • 使用* 锚点名称。可以应用锚点
    • << 锚点名称。表示将锚点追加到本数据组中

‍‍举一个简单例子来说明锚点作用:

张三和小李同属一家公司。在某些场景想要得到他们两人的职位信息。在某些场景只需要这两个人的个人信息。在yaml中就可以定义一个人员信息的数据和一个部门信息数据

输出:

代码语言:javascript复制
{
  'manager': {
    'name': '张三',
    'age': 34,
    'sex': '男'
  },
  'staff': {
    'name': '小李',
    'age': 22,
    'sex': '男'
  },
  'department': [
    {
      'Position_m': '经理'
    },
    {
      'name': '张三',
      'age': 34,
      'sex': '男',
      'level': 10
    },
    {
      'Position_s': '职员'
    },
    {
      'name': '小李',
      'age': 22,
      'sex': '男',
      'level': 5
    }
  ]
}

定义好数据源后,可以根据所需,根据key值,提取不同的数据。进行处理与应用。

强转

yaml中也可以进行强转。但是这种用法个人建议还是不要随便用。避免产生不必要的错误。语法如下:

格式:源数据类型: !!强转目标类型 value --- > data: !!int "55"

强转可以支持所有类型互相强转。这里就简单举例,不过多赘述。最后还是建议不要在数据源中进行强转!

03 读、写

yaml的读与写依赖python中的第三方包---pyyaml

使用pip install pyyaml下载yaml工具包

导入yaml模块。结合with open读取yaml文件

示例

代码语言:javascript复制
# 获取项目根路径
import os

import yaml


def get_cwd():# 获取项目根路径
    return os.getcwd()


# 读取yaml
def read_yaml(filename):
  # filename文件名称
    path = get_cwd()   "/"   filename
    with open(path, "r", encoding='utf-8') as f:
        return yaml.load(stream=f, Loader=yaml.FullLoader)

# 写入yaml
def write_yaml(filename, data):
    # filename文件名称
    # data:写入数据
    path = get_cwd()   "/"   filename
    with open(path, 'a', encoding='utf-8') as f:
        # allow_unicode 允许unicode编码格式
        yaml.dump(data, f, allow_unicode=True)

04 结语

好了。本期内容就到这里了。做个简单的总结。

首先,是应用方面,自动化的用例维护文件分很多种。有excel、txt、yaml等。其中yaml由于其本身存储的数据格式是键值对的格式。更方便我们在参数化中提取、处理、应用。第二点是现在的绝大多数项目都是基于restful框架进行开发的,这个框架的数据返回也是json数据格式。方方面都与yaml相契合。

其次。对于yaml的数据格式、类型、书写规范做了一个简单的梳理。在yaml中,使用空格来表示缩进。注意不能使用tab进行缩进。

最后,结合pyyaml进行读、写操作。

以上就是本期内容。各位大佬。我们下期见。拜拜~

0 人点赞