Yaml:实现python+yaml的接口自动化

1、引言:

YAML 是一种以数据为中心的标记语言,是一种数据格式,扩展名以 .yml 或 .yaml 结尾;

yaml读取出来之后是一个:字典列表格式。

YAML 的语法如下:

  • 使用缩进表示层级关系。
  • 缩进时不允许使用 Tab 键,只允许使用空格。
  • 缩进的空格数不重要,但同级元素必须左侧对齐。
  • 大小写敏感
  • 支持#注释
  • 在yaml里,用on、1、true来表示true; off、0、false来表示false
  • 空值可以用null或~表示

用途: 

  1. 用于:属性配置文件 (yaml,ini)
  2. 用于:编写自动化接口测试用例

 2、数据组成

YAML 支持以下三种数据结构:

        2.1:对象:键值对的集合,map对象,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

        使用“key:[空格]value的形式表示一对键值对(空格不能省略)

  • name: Lucy

        2.2:数组(list):一组按次序排列的值,使用 - 表示列表,

  • 又称为序列(sequence) / 列表(list)

  • -
      name: 用户名密码登录接口-正向流程
      request:
        method: post
        headers: null
        url: https://xxxxxxxxxxxx/usersLogin/login
        data:
          phone: RwP%2BH9D9DTgD1Qf0j7J%2B3A==
          password: kKe2zs5e7SF%2BuzDkBeFLLQ==
      validate: None

  • 用例的基本架构:
  • -
      feature: 模块名    (如:用户管理模块)
      story: 接口名     (如:账号密码登录接口)
      title: 用例标题
      request:  请求
        method: 请求方式
        headers: 请求头
        url: 请求路径
        params:请求参数-url之后的参数
        data:请求参数-表单数据
        json:请求参数-json数据
        files:请求参数-文件上传
    
      validate: 响应断言
        codes    断言状态码
        equals    相等断言
        contains    包含断言
        db_equals    数据断言

    2.3:字面量:单个的、不可拆分的值

  • 纯量(scalars):单个的、不可再分的值

3、yaml文件的引入 

        3.1:导入yaml第三方库

使用import yaml

  • python3中必须先安装pyyaml模块,使用命令为pip install pyyaml

        3.2 :具体方法

  • yaml.load(f):将YAML文档转化成Python对象
  • yaml.load_all(f):返回yaml文件中所有的yaml文档的对象生成一个迭代器,并使用for打印出来
  • yaml.dump(c,f):将一个python对象生成为yaml文档,存放在f中
  • yaml.dump_all(c,f):将多个python对象生成为yaml文档,存放在f中 

        3.3:yaml文件的引入 

import yaml
import os

# 获取项目的根目录
#     1.os.path.dirname(__file__):获取当前文件的目录
#     2..split('common')[0]:切割路径后,得到根目录path

def get_obj_path():
    return os.path.dirname(__file__).split('common')[0]

# 获取yaml文件中的数据:
#     3.get_obj_path() + yamlpath:使用的时候,是项目的路径 + yaml文件的路径
#     4.打开yaml文件,取别名为:f
#     5.获取yaml的文件流,将yaml文件中的数据返回
def read_yaml(yamlpath):
    with open(get_obj_path()+yamlpath,mode='r',encoding='utf-8') as f:
        value = yaml.load(stream=f,Loader=yaml.FullLoader)
        return value

if __name__ == '__main__':
    print(get_obj_path())
    print(read_yaml('testcase/login.yaml'))

4、接口关联:extract关键字

需要解决的问题:

1.如果有接口关联,那么在下一个接口里无法直接调用python里面的方法,而是需要在下一个接口里通过调用方法去覆盖原值

2.如何在yaml中调用随机数的方法呢?

3.一个接口对应一个yaml,如果一个接口中有很多反例,那么yaml里会有很多的数据,该怎么优化?

4.断言 

你可能感兴趣的:(pytest,python)