接口依赖设计思路
由于app需要登录才能浏览其它页面,所以想要请求其它接口必须先请求登录接口,将返回的用户信息及token作为变量参数入参。更多的业务流程之前同样需要依赖上一层接口返回的数据作为入参。
因此,设计接口依赖的自动化用例大体思路如下:
初始化一个session会话对象,使用session会话对象请求登录接口,将登录返回的用户信息及token作为入参,请求其它接口。关键点:session会话对象贯穿于整个请求业务流程中。
接口依赖代码实现
1. 登录
创建一个登录类,包含init方法初始化一个变量s,和登录方法,使用s发送登录请求。
class login():
def __init__(self, s):
self.s = s # 此步是初始化一个session对象,以为后面进行接口测试时调用
# 外部顾问登录
def outside_consultants_login(self, uri):
url = uri + "/login/newLogin"
data = {"type": ,
"acount": "",
"password": ""}
headers = {
'platform': "",
'uuid': ""
}
response = self.s.post(url, data=data, headers=headers) # 使用s调用登录请求接口
data = response.json()
return data # 返回用户信息
2. 定义依赖接口
定义依赖接口,传入参数s以及该接口所需参数(以形参方式传入)。
import requests
import json
from lib.login import *
def get_rob_resources_list(s, uri, token, memberid, platform): # 参数中传入s,以及该接口需要其它参数
url = "/rob/getRobResources"
headers = {
"platform": platform,
"token": token,
"memberId": memberid
}
response = s.post(url=uri + url, headers=headers) # 使用s发送请求
result = response.json()
return result # 返回结果供其它接口调用
3. 测试目标接口
测试目标接口,创建一个测试类继续unittest.TestCase。实例化session会话对象,s = requests.session(),实例化其它参数,进行目标接口测试前环境准备。请求目标接口,打印请求头及响应信息。
import unittest
import requests
import jsonpath
from rob_order.get_rob_resources_list import get_rob_resources_list
from lib.login import *
from lib.smart_counselor_db import *
from data import data
class TestRob(unittest.TestCase):
s = requests.session() # 实例化session会话对象
uri = data.baseUrl
platform = data.platform
@classmethod
def setUpClass(cls):
# 初始化会话对象
cls.a = login(cls.s)
# 登录用户
aa = cls.a.outside_consultants_login(cls.uri)
cls.token = aa['body']['token']
cls.memberid = aa['body']['memberid']
# 抢单列表
rob_list = get_rob_resources_list(cls.s, cls.uri, cls.token, cls.memberid, cls.platform)
# print(rob_list)
cls.logId = jsonpath.jsonpath(rob_list, '$.body.data.list[*].logId')
cls.resourceId = jsonpath.jsonpath(rob_list, '$.body.data.list[*].resourceId')
# 创建数据库连接
cls.conn = get_smart_counselor_db_connect()
def test_rob_resource(self):
# 环境准备-检查数据库是否有该账号数据
USER = self.memberid
query_sql = "SELECT * FROM rob_resource_detail WHERE member_id = '{}' ".format(USER)
delete_sql = "DELETE FROM rob_resource_detail WHERE member_id = '{}'".format(USER)
conn = self.conn
result = query_db(query_sql)
if result:
change_db(delete_sql)
# 请求及响应
url = "/rob/robResource"
headers = {
'platform': "3",
'token': self.token,
'memberId': self.memberid
}
data = {
"logId": self.logId[-1],
"resourceId": self.resourceId[-1]
}
response = requests.post(url=self.uri+url, headers=headers, data=data)
logging.info("请求url:{0},请求头{1},请求体{2}".format(url, headers, data))
logging.info("响应体:"+response.text)
备注:
本文是学习过程中记录下来的笔记,在此之前曾经尝试过多种方法,未能更好的实现却出现代码冗余且问题层出不穷。 无奈请求各路大神,终得一位大神指教,并写出实例供参考。此文正是按照大神提供的思路实出的用例实例。在此,对在学习路上一直耐心提供指导帮助的大神们表示深深地感谢,我本是一个菜鸟,学习的路上坚苦而乏味,因为有大神们的帮助,使用学习变得不再孤单并且乐在其中,再次感谢~
网友评论