pytest+yaml测试用例

发布时间 2023-08-21 09:12:55作者: Raul2018
# 一、yaml格式
#
# yaml是一种数据类型,可以和json之间灵活的切换,支持注释、换行、字符串等。可以用于配置文件或编写测试用例。
#
# 数据结构:一般是键值对的方式出现。注意编写时值前面必须有空格,键:(空格)值。
#
# 如果是数组,以-(空格) 开头来表示
#
# 以user.yaml为例,这里编写两个用例,每个用例中包含有url、method、data、msg等信息。

-
url: **/login
method: POST
data:
userName: **
password: **
msg:
查询成功!
-
url: **/login
method: POST
data:
userName: **
password: **
msg:
帐号或密码错误,请重新输入。

# 二、定义读取yaml测试用例的方法
#
# 在上篇文章《接口自动化测试框架封装入门》的基础上,对yaml_util.py文件进行修改,把原来的读取指定文件中的key值改为读取yaml内容。

#!/usr/bin/python3
# -*- coding:utf-8 -*-
# @Time : 2023/5/28 14:29
# @Author : 凌雪
# @File : yaml_util.py
# @Software: PyCharm
# 功能说明:工具类,保存中间变量,方便接口关联封装


import yaml


def read_yaml(path):
"""
读取yaml文件
:param path: 要读取的yaml文件路径
:return: 返回yaml内容
"""
with open(path, encoding="utf-8") as f:
value = yaml.load(stream=f, Loader=yaml.FullLoader)
# return value[key]
return value

def write_yaml(path, data):
"""
写入yaml文件
:param data:
:return:
"""
with open(path, encoding="utf-8", mode='a') as f:
yaml.dump(data, stream=f, allow_unicode=True)

def clear_yaml(path):
"""
清空yaml文件,一般在整个项目执行之前,清空
:return:
"""
with open(path, encoding="utf-8", mode="w") as f:
f.truncate()

# 三、把测试的服务器地址作为配置文件
#
# 测试的服务器,正常来讲都是比较固定的,但测试环境和正式环境是不同的,因此我们将服务器地址抽出来作为配置文件,方便切换不同的测试环境。这里将配置文件放在config.yaml文件中。

Host:
baseurl: http://*****/
trainurl: http://****/

# 四、执行测试的用例文件修改
#
# 这里结合@pytest.mark.parametrize方法实现用例数据驱动。

#!/usr/bin/python3
# -*- coding:utf-8 -*-
# @Time : 2023/5/28 15:33
# @Author : 凌雪
# @File : test_login.py
# @Software: PyCharm


import pytest
from common.send_request import Send_Request
from common.yaml_util import *

class TestLogin:

@pytest.mark.parametrize('user', read_yaml('../datas/user.yaml'))
def test_login(self, user):
# url = "http://**"
baseurl = read_yaml('../config.yaml')['Host']['baseurl']
# print("配置文件中的host是 %s" % baseurl)
url = baseurl + user['url']
# data = {
# "userName": "***",
# "password": "****"
# }
print(user['msg'])
# res = Send_Request().post(url=url, data=user['data']).json()
res = Send_Request().all_send_request(method=user['method'], url=url, data=user['data']).json()
# token = res["jwt"]
# # write_yaml({"token": token}) #将token写入yaml文件
# print(token)
msg = res['msg']
assert user['msg'] == msg



if __name__ == "__main__":
pytest.main(["-s"]) #加s,可以在控制台输出print信息