来自接口测试初学者的笔记,写的不对的地方大家多多指教哦
一、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: "<http://1.1.1.1>: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)