Python接口测试—读取Yaml文件内容

来自接口测试初学者的笔记,写的不对的地方大家多多指教哦

一、Yaml的基本操作

以下关于yaml文件的内容都存储在t.yaml文件中,路径为:./t.yaml

1.使用字典:{'name': 'test_yaml', 'result': 'success'}

  • 字典的键值对使用“:”分隔
  • 字典直接写key和value,每个键值对占一行
  • ”:“后面要加空格
name: "test_yaml"
result: "success"

2.使用列表:['a', 'b', 'c']

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

3.字典嵌套字典:

{'person1': {'name': 'xiaoming', 'age': '18'},

'person2': {'name': 'xiaohua', 'age': '20'}}

person1:
  name: "xiaoming"
  age: "18"
person2:
  name: "xiaohua"
  age: "20"

4.字典嵌套列表:{person:["a","b","c"]}

person:
  - "a"
  - "b"
  - "c"

5.列表嵌套列表:[['a', 'b', 'c'], ['a', 'b', 'c']]

-
  - "a"
  - "b"
  - "c"
-
  - "a"
  - "b"
  - "c"

6.列表嵌套字典:[{'username1': 'test1'}, {'password1': 111}, {'username2': 'test2'}]

- username1: test1
- password1: 111
- username2: test2

二、读取Yaml文件

1.读取单个文件

使用yaml.safe_load()读取单个文件

import yaml
# 打开Yaml文件
with open("./t.yaml", 'r', encoding='utf-8') as f:
    # 读取Yaml文件
    r = yaml.safe_load(f)
    print(r)

注意:

encoding='utf-8':如果Yaml文件中存在中文字符,则需要添加该属性

2.读取多个文件

Yaml文件中使用”- - -“来标识文件,即表示测试用例

Yaml文件中多个文件的配置

# 读取多个文档
---
"用户名称1": "test123"
"密码": "123123"
---
"用户名称2": "test456"
"密码": "123123"

使用yaml.safe_load_all()读取多个文件

import yaml
# 读取多个文件
# 打开Yaml文件
with open("./t.yaml", 'r', encoding='utf-8') as f:
    # 读取Yaml文件
    r = yaml.safe_load_all(f)
    # 循环打印
    for i in r:
        print(i)

三、Yaml封装

思路

  • 创建类
  • 初始化文件,判断文件是否存在
  • 读取单个/多个文件

完整Yaml封装代码如下

# 封装Yaml文件
import os
import yaml

class YamlReader:
    # 初始化,判断文件是否存在
    def __init__(self, yaml_file):
        if os.path.exists(yaml_file):
            self.yaml_file = yaml_file
        else:
            # 文件不存在,raise抛出异常
            raise FileNotFoundError("文件不存在")
        # 是否读取过单个文档
        self._data = None
        # 是否读取过多个文档
        self._data_all = None

    # yaml单个文档读取
    def data(self):
        # 第一次调用data,读取yaml单个文档,如果不是,直接返回之前保存的数据
        if not self._data:
            with open(self.yaml_file, "rb") as f:
                self._data = yaml.safe_load(f)
        return self._data

    # yaml多个文档读取
    def data_all(self):
        # 第一次调用data,读取yaml多个文档,如果不是,直接返回之前保存的数据
        if not self._data_all:
            with open(self.yaml_file, "rb") as f:
                self._data_all = list(yaml.safe_load_all(f))
        return self._data_all

测试

from utils.yaml_util import YamlReader

# 封装yaml文件测试
# 单个文件
res = YamlReader("./t.yml").data()
print(res)
# 多个文件
res_all = YamlReader("./t.yml").data_all()
print(res_all)

知识点:

使用raise抛出异常,基本语法为:raise [exceptionName [(reason)]],raise具有三种常用语法,如下:

  • raise:单独一个 raise。该语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常。
  • raise 异常类名称:raise 后带一个异常类名称,表示引发执行类型的异常。
  • raise 异常类名称(描述信息):在引发指定类型的异常的同时,附带异常的描述信息。

其它详细知识点参考:http://c.biancheng.net/view/2360.html

四、读取Yaml配置文件

在第三部分,初始化判断文件是否存在时需要传入Yaml文件地址,这边我们可以通过代码来获取配置文件的地址,以此来读取配置文件的内容。

具体的代码如下

# 获取配置文件地址,读取配置文件内容
import os
from utils.yaml_util import YamlReader

# 1.获取项目的基本目录
# 获取当前文件的绝对路径:E:\\study\\Fork\\InterAutoTest_W\\AutoTest\\config\\read_conf.py
current = os.path.abspath(__file__)
# 获取当前项目的绝对路径:在当前文件路径的上两级目录,E:\\study\\Fork\\InterAutoTest_W\\AutoTest
BASE_DIR = os.path.dirname(os.path.dirname(current))
# 定义config目录的路径,os.sep表示路径拼接(config为配置文件所属的包名)
_config_path = BASE_DIR + os.sep + "config"
# 定义conf_url.yml文件的路径(conf_url.yml为具体的配置文件名)
_config_url_file = _config_path + os.sep + "conf_url.yml"

# 由于定义的变量是私有的,所以这边定义方法去访问
def get_config_path():
    return _config_path

def get_config_file():
    return _config_url_file

# 2.读取配置文件
# 创建类
class ConfigYaml:
    # 初始化Yaml读取配置文件
    def __init__(self):
        self.config = YamlReader(get_config_file()).data()

    # 获取url
    def get_conf_url(self):
        return self.config["BASE"]["test"]["url"]

    # 获取测试数据
    def get_conf_data(self):
        return self.config["DATA"]["test_login"]

Yaml文件内容

BASE:
  test:
    url: ":1111"

DATA:
  test_login:
    username: "python"
    password: "12345678"

测试

import requests
from utils.request_util import request_get, request_post
from utils.request_util import Request
from config.read_conf import ConfigYaml

request = Request()
conf_y = ConfigYaml()

def login_yaml_data():
    url_path = conf_y.get_conf_url()
    url = url_path + "/authorizations/"
    data = conf_y.get_conf_data()
    # 使用重构后的post
    r = request.post(url, json=data)
    print(r)

你可能感兴趣的:(Python接口测试—读取Yaml文件内容)