Loading

6.YAML文件详解、PyYaml操作

 
YAML简介:
  • yaml是一种数据格式,支持注释,换行,多行字符串,裸字符串(正序,字符串)
 
YAML作用:
  • 用于全局的配置文件
  • 用于测试用例编写
 
YAML语法规则:
  • 区分大小写
  • 使用缩进表示层级,不能使用tab键进行缩进,只能用空格
  • 缩进没有数量,只要前面对其就可以
  • 注释是#

数据组成:
Map对象

#键值对,key:(空格)value,必须加空格,如果换行,可以不加空格
#多行写法
yamltest:
  key: value,
  key2: value2

#一行写法
yamltest2: {key: 1, key2: 2}

#写法3
key: value

数组

#每个结构下面,对其的-,表示是同一个数组
#示例1
yamltest:
  -key: value,
  -key2: value2
  
#结果等同于{'yamltest':[{'key':value},{'key2':value2}]}
# 示例2

-
 test1: #注意缩进
    a: 2
    b: 3
-
 test2:
    a: 2
    b: 3
"""
结果等同于
[
  {
    "test1": {
      "a": 2,
      "b": 3
    }
  },
  {
    "test2": {
      "a": 2,
      "b": 3
    }
  }
]
"""
python操作yaml
python操作yaml的包:pyyaml
安装:pip3 install pyyaml
导入:import yaml
yaml.load()

yaml.load(stream,Loader)
函数的作用是用来将YAML文档转化成Python对象
stream:文件流
Loader:加载方式
返回值:返回值为一个Python字典对象
yaml.load_all()

yaml.load_all(stream,Loader)
如果string或文件包含几块yaml文档,你可以使用yaml.load_all来解析全部的文档
stream:文件流
Loader:加载方式
返回值:返回值为一个Python字典对象
yaml.dump()
yaml.dump(data, stream=None, Dumper=Dumper, **kwds)
将一个python对象生成为yaml文档

Loader加载方式

BaseLoader 仅加载最基本的YAML
SafeLoader 安全地加载YAML语言的子集。建议用于加载不受信任的输入(safe_load)
FullLoader 加载完整YAML语言。避免任意代码执行。这是默认加载器(full_load)
UnsafeLoader 也称为Loader向后兼容性,原始的Loader代码,不受信任的数据可能通过这种方式执行其他有危害的代码
# -*- coding: utf-8 -*-
# @Time:     2022/5/4 13:51
# @Author:   LiQi
# @Describe:
import yaml

class YamlUtil:

    def __init__(self, yaml_file):
        '''

        :param yaml_file: yaml文件,通过初始化把文件传入到操作yaml的类
        '''

        self.yaml_file = yaml_file

    # 读取yaml文件
    def read_yaml(self):
        '''
        读取yaml,对yaml进行反序列
        '''
        # 打开yaml文件得到文件f
        with open(self.yaml_file, encoding='utf-8') as f:
            # yaml.FullLoader加载方式
            value = yaml.load(f, Loader=yaml.FullLoader)
        return value
接口请求示例
#yaml用例
-
  name: 接口名称
  request: 
    url: https://xxxxxxx.com #请求地址
    method: get #请求方式
    headers:  #请求头
       Content-Type: applicstion/json
       
    params: #请求参数
      k1: v1
      k2: v2
      
    validate:#断言
      - eq: {code: 0}   
      - eq: {statys: 200}    
# 接口请求
import
pytest import requests from .yaml_util import YamlUtil class TestApi: # YamlUtil是之前封装好的读取yaml的类 @pytest.mark.parametrize('args', YamlUtil('./test.yaml').read_yaml()) def test_01_api(self, args): url = args['request']['url'] params = args['request']['params'] res = requests.get(url, params) assert args['eq'] in res.txt
如果yaml里面有多个结构用例,args里面有多条数据,有多少条数据,方法就可以执行多少次,所以我们可以yaml里面有多条用例,然后一个方法读取运行

posted @ 2022-05-04 14:35  木子七  阅读(687)  评论(0编辑  收藏  举报