概要
这里我们测试一个接口有两个文件。一个是接口定义、一个测试用例集。
接口定义示例
每个接口定义一个类,url和请求参数为类方法,方便复用!
# -*- coding: utf-8 -*-#
# file: coll_work.py
# Author: zaygee
# Date: 2021/5/13
from config import env
class CollWork:
"""设置该作品为协作作品"""
@classmethod
def url(cls, work_Id):
return env.SOCKET_COLL_HOST + '/coll/{}'.format(work_Id)
@classmethod
def data(cls):
pass
普通接口测试用例示例
每个接口测试文件定义setup_class,这里我们用作请求登陆接口并写入cookie.json文件
tips:简单说下这么处理的原因吧,原本鉴于requests库的session对象,是可以让我们跨请求保持某些参数,也会在同一个session实例发出的所有请求之间保持cookies,但是为了实现权限类接口的场景,我们需要两个不同用户的cookie,必要时候在headers传入不用用户的cookie 😊嘿嘿嘿。
@allure.feature("设置该作品为协作作品接口")
class TestCollKitten:
@classmethod
def headers(cls):
return {'cookie': base.read_cookie()['cookie']}
@classmethod
def setup_class(cls):
base.write_cookie()
@allure.title("传入普通作品work_id")
def test_01(self, work):
data = Work.data()
work_id = work(data) # 业务场景需要生成请求参数
res = base.post_req(CollWork.url(work_id), headers=self.headers())
assert res.status_code == 200
assert base.extract(res.text, '$.msg'), '操作成功'
socket接口测试用例示例
@allure.feature("协作websocket接口")
class TestSocketCollaborate:
@classmethod
def setup_class(cls):
“”“
根据业务场景需要,
调用登陆接口并将cookie、cookie的value写入文件
”“”
base.write_cookie_value()
base.write_cookie()
@classmethod
def headers(cls):
“”“headers添加cookie”“”
return {'cookie': base.read_cookie()['cookie']}
@classmethod
def cookie_value(cls):
“”“读取cookie value用于请求参数”“”
return base.read_cookie_value()['value']
def setup(self):
“”“当前环境下的全局变量,用于当前用例集数据共享”“”
self.g = globals()
@allure.title("传入协作作品的workId")
def test_01(self, work, coll_work):
data = Work().data()
work_id = coll_work(work(data)) # 业务场景需要生成请求参数
self.g['work_id'] = work_id # 设置全局共享数据
coll_url = Req.url(work_id, self.cookie_value())
wss = SocketCon.con(coll_url)
wss.send('42["join",{}]'.format(work_id)) # 发送socket数据
assert SocketCon.recv_log(wss, 4).split(',')[2].split(':')[1].strip("\""), True