接口自动化数据分离的方式很多,有数据库存储测试数据、Excel维护测试数据、Yaml文件维护测试数据,本文重点介绍使用Yaml维护测试数据,接口调用Yaml文本。
第1步: Yaml的介绍及安装
1. Yaml的介绍
Yaml 是一种所有编程语言可用的友好的数据序列化标准。语法和其他高阶语言类似,并且可以简单表达字典、列表和其他基本数据类型的形态
2. yaml格式作为文件的配置格式
- yaml支持注释
- 不必强求逗号括号等符号
- 通过缩进来区分层级,视觉上清晰很多
3. Yaml安装
pip install PyYaml
4. Yaml简单应用
data.yml文件
#读取多个文档--yaml写法----注意空格
---
"name": "新北通"
"time": "180211"
---
"company": "玩蜂"
"日期": "180320"
yaml_demo.py读取data.yml文件
"""
@Time : 2020/10/5 19:24
@Auth : Yvon~₯㎕ζ๓
@File :yaml_demo.py
"""
"""
#1、创建yaml格式文件
#2、读取这个文件
#3、输出
"""
import yaml
from utils.YamlUtil import YamlReader
# res = YamlReader("./data.yml").data()
res = YamlReader("./data.yml").data_all()
print(res)
读取data.yml文件结果.jpg
第2步: Yaml实战于接口自动化--配置测试数据
简单设计配置URL访问地址,新建conf.yml文件
# -*- coding: utf-8 -*-
# @Time : 2021/1/11 16:02
# @Author : Yvon_₯㎕ζ๓
BASE:
test:
url: "https://xxxxxx.com"
case_file: "testdata.xlsx"
case_sheet: "斗地主接口测试"
第3步: Yaml实战于接口自动化--封装读取Yaml
在工具类utils文件夹下 新建YamlUtil.py脚本,读取单行Yaml文件内容,全部读取Yaml文件内容.
"""
@Time : 2020/10/6 10:44
@Auth : Yvon~₯㎕ζ๓
@File :YamlUtil.py
"""
import os
import yaml
#1、创建类
class YamlReader:
#2、初始化,文件是否存在
# def _init_(self):
def __init__(self,yamlf):
if os.path.exists(yamlf):
self.yamlf = yamlf
else:
raise FileNotFoundError('文件不存在')
self._data = None
self._data_all = None
#3、文件读取
#1、读取单个文档
def data(self):
#第一次调用data,读取yamlf文档,如果不是,直接返回之前保存的数据
if not self._data:
with open(self.yamlf,"rb") as f:
self._data = yaml.safe_load(f)
return self._data
#2、读取多个文档
def data_all(self):
#第一次调用data,读取yamlf文档,如果不是,直接返回之前保存的数据
if not self._data_all:
with open(self.yamlf,"rb") as f:
self._data_all = list(yaml.safe_load_all(f))
return self._data_all
第4步: Yaml实战于接口自动化-- 增加调用封装YamlUtil.py脚本
新建Conf.py脚本文件,使用YamlUtil.py脚本,读取conf.yml文件内容,供给后续登录接口使用.
脚本大体思路如下:
- 定义获取项目基本目录脚本
- 定义获取当前项目的绝对路径脚本
- 定义调用Yaml文件所在文件夹目录路径脚本
- 定义conf.yml文件路径脚本
- 定义方法--获取Yaml文件所在文件夹目录
- 定义方法--获取conf.yml文件路径
- 定义类-初始化读取conf.yml文件信息
- 定义类-读取配置conf.yml中url信息方法
# -*- coding: utf-8 -*-
# @Time : 2021/1/11 16:16
# @File : Conf.py.py
# @Author : Yvon_₯㎕ζ๓
import os
from utils.YamlUtil import YamlReader
#获取项目基本目录
current = os.path.abspath(__file__)
# print(current)
#获取当前项目的绝对路径
BASE_DIR = os.path.dirname(os.path.dirname(current))
# print(BASE_DIR)
#定义config目录路径
_config_path = BASE_DIR + os.sep + "config"
# print(_config_path)
#定义conf.yml文件路径
_confyml_file = _config_path + os.sep + "conf.yml"
# print(_confyml_file)
#***************************************定义方法**************************************
def get_config_path():
"""
获取config文件夹目录
:return:
"""
return _config_path
def get_confyml_file():
'''
获取conf.yml文件路径目录
:return:
'''
return _confyml_file
#读取配置文件,创建类
class ConfigYaml:
def __init__(self):
# 初始化读取yaml配置文件
self.config = YamlReader(get_confyml_file()).data()
# 定义方法获取重要信息
def get_conf_url(self):
'''
获取confyml配置文件中url地址
:return:
'''
return self.config["BASE"]["test"]["url"]
if __name__ == "__main__":
conf_read = ConfigYaml()
print(conf_read.get_conf_url())
第5步: 增加封装Header脚本
Header信息整个接口自动化中,使用频率较高,多个接口会重复使用,为了减少代码输出及达到美观效果,对其进行封装,便于重复调用
#定义header方法
def get_SDK_header():
headers = {
"App-Channel": "500001009",
"Host":"xxxxxxx.com",
"App-GameId": "90005",
"App-DeviceNum": "65815b3b-befd-35ed-afb6-23d7092d0b82"}
header = headers
return header
#定义登录params方法
def get_params():
params = {"uId": "2028121608241945","nickName":"957484204800", "session":"VeK1YjaYpKGS9INQ"}
params = params
return params
if __name__ == '__main__':
print(get_SDK_header())
第6步: 新增登录接口脚本
登录脚本后续只需维护配置文件,无需修改代码,减少时间人力成本.
import requests,json
from config.Conf import ConfigYaml
from common.header_Base import get_SDK_header,get_params
def test_login():
#定义测试数据
conf_y = ConfigYaml() # 加载config.Conf文件中的ConfigYaml类
url_path = conf_y.get_conf_url() # 读取配置文件中的url
base_url = url_path + "/member/api/mi/login" # 拼接url
#发送Post请求
header = get_SDK_header()
params = get_params()
r = requests.post(url=base_url, headers=header, json=params, verify=False)
#输出结果
result = r.json()
print(json.dumps(result, sort_keys=True, ensure_ascii=False, indent=4, separators=(', ', ': '))) # Json格式打印
if __name__ == "__main__" :
print(test_login())
网友评论