这里以登录接口为例,老规矩
第一步还是安装
这里我们用的框架为pytest,因此安装:
pip install pytest
pip install pyyaml 注意:yaml的包是pyyaml
第二步准备数据
安装好之后呢,我们就可以开始啦,在项目下新建一个名为data的包,然后在data中创建一个user.yaml的文件(后缀名也可以是yml),在文件中存入我们的参数,像这样:
YAML支持三种数据结构:对象、数组、纯量
这里我们把登录接口的用例参数使用数组写入,使用一个短横线-加一个空格 代表一个数组项,有疑问的可以学习一下yaml的格式
这样数据就准备好了
第三步封装读取yaml数据
我们在在项目下建个包,名称:load_data,在包下新建一个yaml_load.py,这里我们直接上代码:
import yaml
# yaml格式的数据读取
def load(path):
file = open(path,'r',encoding='utf-8')
data = yaml.load(file,Loader=yaml.FullLoader)
return data
第四步登录接口自动化
新建包:pytest_case,在包下新建test_config.py,这里的代码就是接口测试的代码了,这里将读取的yaml数据赋值给user变量,然后将user作为参数调用,如下:
import pytest
import requests
import yaml
from load_data import yaml_load
@pytest.mark.parametrize('user',yaml_load.load('../data/user.yaml'))
def test_01(user):
url_login = "https://****"
headers = {'Content-Type': 'application/json'}
print(user)
response1 = requests.request("POST", url=url_login, headers=headers, json=user)
print(response1.text)
if __name__ == '__main__': # pytest运行模式
pytest.main('-v','-s')
然后成功运行,结果如下:
当然你还可以为之加上断言
第五步加入断言
在加入断言之前我们需要对YAML数据进行升级
-
user:
'account': '***'
'password': '014f4041514bc5dcb82845fe5efa3c54'
'project': 'DEFAULT'
'teacherLogin': False
'clientId': '1'
'secret': '***'
msg: 成功
-
user:
"account": "****"
"password": "123456"
"project": "DEFAULT"
"teacherLogin": false
"clientId": "1"
"secret": "**"
msg: 账号或密码不正确!
-
user:
"account": "*****"
"password": ""
"project": "DEFAULT"
"teacherLogin": false
"clientId": "1"
"secret": "***"
msg: 密码不能为空;
-
user:
"account": ""
"password": "014f4041514bc5dcb82845fe5efa3c54"
"project": "DEFAULT"
"teacherLogin": false
"clientId": "1"
"secret": "**"
msg: 账号不能为空;
这里我们使用对象将参数与返回的预期结果写入yaml,然后再对接口代码这里做一些修改:
import pytest
import requests
import yaml
import json
from load_data import yaml_load
@pytest.mark.parametrize('data',yaml_load.load('../data/user.yaml')) #这里将读取的数据赋值给data
def test_01(data): #将data作为参数
url_login = "https://*****"
headers = {'Content-Type': 'application/json'}
response1 = requests.request("POST", url=url_login, headers=headers, json=data['user']) #将data中的user对象数据传入接口
msg=json.loads(response1.text)['message'] #提取接口返回的message
# assert data['msg'] == msg #断言,将返回的message与预期msg作比较,一致则通过,不一致就会失败
if __name__ == '__main__': # pytest运行模式
pytest.main('-v','-s')
最后附上运行结果: