头条项目接口自动化测试三之登录接口测试
目录
头条项目接口自动化测试(三)之登录接口测试
登录接口测试
1、自动化测试的目录结构
2、实现登录接口对象的封装api_login.py
"""
功能:实现登录接口对象的封装
"""
import requests
class ApiLogin(object):
#登录方法(url、mobile、code 从 data 的数据文件读取出来,做参数化处理)
def api_post_login(self,url,mobile,code):
#headers 定义
headers= {"Content-Type": "application/json"}
#data 定义
data={"mobile": mobile,"code": code}
#调用 post 并返回响应对象
return requests.post(url,headers=headers,json=data)
3、登录接口的业务实现测试用例 test_login.py
"""
功能:登录接口的业务实现测试用例
"""
import unittest
from api.api_login import ApiLogin
from parameterized import parameterized
from tools.read_json import ReadJson
#读取 json 数据
def get_data():
datas=ReadJson("login.json").read_json()
#建立空列表,添加读取的 json 数据
arrs=[]
#遍历多条 json 数据用例
for data in datas.values():
arrs.append((data.get("url"),
data.get("mobile"),
data.get("code"),
data.get("expect_result"),
data.get("status_code")))
return arrs
#登录测试类
class TestLogin(unittest.TestCase):
#使用参数化动态获取参数数据
@parameterized.expand(get_data())
def test_login(self,url,mobile,code,expect_result,status_code):
#设置临时静态参数,url、mobile、code(有效一分钟)
# url="http://ttapi.research.itcast.cn/app/v1_0/authorizations"
# mobile="18264152106"
# code="965754"
#调用登录方法,返回响应对象
result=ApiLogin().api_post_login(url,mobile,code)
print("响应结果:",result.json())
#断言,响应信息,状态码
self.assertEquals(expect_result,result.json()['message'])
self.assertEquals(status_code,result.status_code)
if **name** == '**main**':
unittest.main()
# 响应结果: {'message': 'OK', 'data': {'token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1ODUxMzA1ODksInVzZXJfaWQiOjEyMzEwNTIyNDk1Njg5MDMxNjgsInJlZnJlc2giOmZhbHNlfQ.QFy0lXJ1So4bwJDLDwjbC6o2KeZyFYnYf2uMz-OAyMo', 'refresh_token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1ODYzMzI5ODksInVzZXJfaWQiOjEyMzEwNTIyNDk1Njg5MDMxNjgsInJlZnJlc2giOnRydWV9.TcgtEJs1p87aM5k5g9gqe46uSvddR_9MA9dMkpf9uVQ'}}
4、json 数据 login.json
{
"login001":{
"url":"http://ttapi.research.itcast.cn/app/v1_0/authorizations",
"mobile":"18264152106",
"code":"222337",
"expect_result":"OK",
"status_code":201
},
"login002":{
"url":"http://ttapi.research.itcast.cn/app/v1_0/authorizations",
"mobile":"18264152101",
"code":"222337",
"expect_result":{"mobile":"18264152101 is not a valid mobile"},
"status_code":400
}
}
5、读取 json 数据工具类 reas_json.py
"""
功能:读取 json 数据,返回 json 对象
"""
import json
class ReadJson(object):
#初始化 json 地址
def **init**(self,fileName):
self.filePath="../data/"+fileName
#读取 json
def read_json(self):
with open(self.filePath,"r",encoding="utf-8") as f:
#调用 load 方法加载文件流
return json.load(f)