【python做接口测试的学习记录day3——使用yaml进行参数化实现接口自动化】

这里以登录接口为例,老规矩

第一步还是安装

这里我们用的框架为pytest,因此安装:

pip install pytest

pip install pyyaml 注意:yaml的包是pyyaml

第二步准备数据

安装好之后呢,我们就可以开始啦,在项目下新建一个名为data的包,然后在data中创建一个user.yaml的文件(后缀名也可以是yml),在文件中存入我们的参数,像这样:

【python做接口测试的学习记录day3——使用yaml进行参数化实现接口自动化】_第1张图片

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')

然后成功运行,结果如下:

【python做接口测试的学习记录day3——使用yaml进行参数化实现接口自动化】_第2张图片

当然你还可以为之加上断言

第五步加入断言

在加入断言之前我们需要对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')

最后附上运行结果:

【python做接口测试的学习记录day3——使用yaml进行参数化实现接口自动化】_第3张图片

你可能感兴趣的:(学习,自动化,python,功能测试,测试工具)