一,yaml文件的创建:文件名login.yaml
二,根据接口文档进行yaml格式用例的编写
接口文档如下:
yaml用例如下:文件名是login.yaml
# 基础接口信息配置
- baseInfo:
api_name: 用户登录接口 # 接口名称,用于标识当前接口的功能
url: /dar/user/login # 接口请求路径,通常与域名拼接形成完整URL
method: post # 请求方法,支持 post/get/put/delete 等
header: # 请求头配置
Content-Type: application/x-www-for-urlencoded;charset=UTF-8 # 表单格式编码,注意拼写应为 form-urlencoded
# 测试用例集合
testCase:
# 测试用例1:验证正确账号密码的登录场景
- case_name: 正确的账号和密码登录验证 # 用例名称,描述测试场景
data: # 根据请求头来确定是data,或json,或params 请求参数(根据header的Content-Type,数据以表单格式发送)
user_name: test01 # 用户名参数
passwd: admin123 # 密码参数
validation: # 断言配置,验证接口响应是否符合预期
- contains: { 'msg': '登录成功'} # 响应体中需包含"msg:登录成功"
extract: # 提取响应数据,供后续接口使用
token: $.token # 使用JSONPath语法提取token值(例:{"token": "abc123"})
# 测试用例2:验证错误账号密码的登录场景
- case_name: 错误的账号和密码登录验证
data:
user_name: test0123 # 不存在的用户名
passwd: admin123 # 密码(此处可能需确认是否与错误账号匹配)
validation:
- contains: { 'msg': '登录失败,用户名或密码错误' } # 预期错误提示
extract:
token: $.token # 使用JSONPath语法提取token值(例:{"token": "abc123"})
三,创建也给读取yaml的文件:文件名readyaml.py
import yaml
def get_testcase_yaml(file):
"""
获取yaml文件的数据
:param file: yaml文件的路径
:return: yaml文件中的数据,如果读取失败则返回None
"""
try:
# 以只读模式打开指定的yaml文件,并指定编码为utf-8
with open(file, 'r', encoding='utf-8') as f:
# 使用yaml.safe_load方法加载文件内容,将其转换为Python对象
yaml_data = yaml.safe_load(f)
return yaml_data
except Exception as e:
# 如果在读取文件过程中出现异常,打印异常信息
print(e)
return None
if __name__ == '__main__':
# 调用get_testcase_yaml函数读取login.yaml文件,并获取第一个元素
res = get_testcase_yaml("login.yaml")[0]
# 从res中提取baseInfo字典中的url字段
url = res["baseInfo"]["url"]
# 拼接新的url,将本地地址和原url组合
new_url = "http://127.0.0.1:8787" + url
# 从res中提取baseInfo字典中的method字段
method = res["baseInfo"]["method"]
# 从res中提取testCase列表的第一个元素的data字段
data = res["testCase"][0]["data"]
# 从sendrequests模块中导入SendRequests类
from sendrequests import SendRequests
# 创建SendRequests类的实例
send = SendRequests()
# 调用SendRequests类的run_main方法发送请求,传入请求方法、url、数据和请求头
res = send.run_main(method=method, url=new_url, data=data, header=None)
# 打印请求的响应结果
print(res)
四,提取接口的返回值到指定的yaml文件
class ReadYamlData:
"""读取yaml数据,以及写入数据到指定的yaml文件中"""
# 类的构造函数,用于初始化对象的属性
def __init__(self, yaml_file=None):
# 如果传入的 yaml_file 参数不为 None
if yaml_file is not None:
# 将传入的 yaml_file 赋值给对象的 self.yaml_file 属性
self.yaml_file = yaml_file
else:
# 若未传入 yaml_file 参数,将对象的 self.yaml_file 属性默认设置为 'login.yaml'
self.yaml_file = 'login.yaml'
# 定义一个实例方法,用于将数据写入 YAML 文件
def write_yaml_data(self, value):
"""
写入数据到yaml文件
:param value: (dict)写入的数据
:return:
"""
# 初始化一个变量 file 为 None,用于后续存储文件对象
file = None
# 定义要写入的 YAML 文件的路径
file_path = r'extract.yaml'
# 检查指定路径的文件是否不存在
if not os.path.exists(file_path):
# 若文件不存在,创建该文件路径
os.system(file_path)
try:
# 以写入模式打开指定路径的文件,并指定编码为 UTF-8,将文件对象赋值给 file 变量
file = open(file_path, 'w', encoding='utf-8')
# 检查传入的 value 是否为字典类型
if isinstance(value, dict):
# 使用 yaml.dump 方法将字典数据转换为 YAML 格式的字符串,allow_unicode=True 可支持写入中文,sort_keys=False 表示不按键排序
write_data = yaml.dump(value, allow_unicode=True, sort_keys=False)
# 将转换后的 YAML 字符串写入文件
file.write(write_data)
else:
# 若传入的 value 不是字典类型,打印提示信息
print('写入到【extract.yaml】的数据必须是字典类型')
# 捕获可能出现的异常
except Exception as e:
# 打印异常信息
print(e)
finally:
# 无论是否发生异常,最后都关闭文件对象
file.close()
五,readyaml.py模块的总代码
readyaml.py模块会将读取的token存入一个新的yaml文件:extract.yaml
import os
import yaml
def get_testcase_yaml(file):
"""
获取yaml文件的数据
:param file: yaml文件的路径
:return: yaml文件中的数据,如果读取失败则返回None
"""
try:
# 以只读模式打开指定的yaml文件,并指定编码为utf-8
with open(file, 'r', encoding='utf-8') as f:
# 使用yaml.safe_load方法加载文件内容,将其转换为Python对象
yaml_data = yaml.safe_load(f)
return yaml_data
except Exception as e:
# 如果在读取文件过程中出现异常,打印异常信息
print(e)
return None
class ReadYamlData:
"""读取yaml数据,以及写入数据到指定的yaml文件中"""
def __init__(self, yaml_file=None):
if yaml_file is not None:
self.yaml_file = yaml_file
else:
self.yaml_file = 'login.yaml'
def write_yaml_data(self, value):
"""
写入数据到yaml文件
:param value: (dict)写入的数据
:return:
"""
file = None
file_path = r'extract.yaml'
if not os.path.exists(file_path):
os.system(file_path)
try:
file = open(file_path, 'w', encoding='utf-8')
if isinstance(value, dict):
write_data = yaml.dump(value, allow_unicode=True, sort_keys=False) # allow_unicode=True 可写入中文
file.write(write_data)
else:
print('写入到【extract.yaml】的数据必须是字典类型')
except Exception as e:
print(e)
finally:
file.close()
if __name__ == '__main__':
# 调用get_testcase_yaml函数读取login.yaml文件,并获取第一个元素
res = get_testcase_yaml("login.yaml")[0]
# 从res中提取baseInfo字典中的url字段
url = res["baseInfo"]["url"]
# 拼接新的url,将本地地址和原url组合
new_url = "http://127.0.0.1:8787" + url
# 从res中提取baseInfo字典中的method字段
method = res["baseInfo"]["method"]
# 从res中提取testCase列表的第一个元素的data字段
data = res["testCase"][0]["data"]
# 从sendrequests模块中导入SendRequests类
from sendrequests import SendRequests
# 创建SendRequests类的实例
send = SendRequests()
# 调用SendRequests类的run_main方法发送请求,传入请求方法、url、数据和请求头
res = send.run_main(method=method, url=new_url, data=data, header=None)
# 打印请求的响应结果
print(res)
token = res.get('token')
print(token)
write_data = {'token': token}
read = ReadYamlData()
read.write_yaml_data(write_data)