在autoTestSchem内只需要定义了如下参数,即可使用requestBase类发送请求
# config/test.toml[test.request]base_url = "https://www.baidu.com"api = [['api', 'userapi', 'common'], ['api', 'userapi', 'au']]
config定义说明
base_url:网址 api:api目录,可支持多个目录,如定义根目录下api/userapi/common,填入[‘api’, ‘userapi’, ‘common’]即可
requestBase类方法说明:
class requestBase(object):def set_session(self, client):# 设置客户端,locust压测时初始化使用def get_api(self, api_id):"""根据api_id获取api数据,返回request类,该类可直接传入execute方法进行运行""""def execute(self, request):"""发送请求:param request: 请求题""""def register_setup_hook(self, hook):"""注册前置钩子""""def register_teardown_hook(self, hook):"""注册后置钩子:param hook::return:"""def close_hook(self):"""关闭钩子执行,在钩子内调用请求的时候需要使用到,记得使用完成后开启钩子:return:"""def open_hook(self):"""开启钩子执行:return:"""
HOOK说明
当注册了hook之后,每次发送请求的时候都会去调hook,并传入一些对应参数,传参说明
- request
- 可选入参,用来获取并修改参数
- session
- 可选入参,返回的是一个requests.Request类,用于获取session,token等内容
- kwargs
- 可选入参,返回的是一个dict,包含我们在config内传入的所有参数
举例
from autoTestScheme.case import Baseclass TestBase(Base):def setup_class(self):if self.settings.exists('request'):self.settings.request.register_setup_hook(self.test1)self.settings.request.register_setup_hook(self.test2)self.settings.request.register_setup_hook(self.test3)@classmethoddef test1(self):self.logger.info('test1')@classmethoddef test2(self, request, session, kwargs):request['params']['c_token'] = session.cookies.get("c_token")@classmethoddef test3(self, request, session, kwargs):self.logger.info(kwargs)
注意1:hook是一个方法,当在类内的时候,方法如下
class TestBase(Base):def setup_class(self):if self.settings.exists('request'):self.settings.request.register_setup_hook(self.test1)@classmethoddef test1(self):self.logger.info('test1')# 调用类方法形式self.send_msg(self, 123)self.send_msg1(123)def send_msg(self, msg):print(msg)@classmethoddef send_msg1(self, msg):print(msg)
注意2:hook的注册尽量不要放到pytest类的setup内,兼容问题
