在autoTestSchem内只需要定义了如下参数,即可使用requestBase类发送请求

  1. # config/test.toml
  2. [test.request]
  3. base_url = "https://www.baidu.com"
  4. api = [['api', 'userapi', 'common'], ['api', 'userapi', 'au']]

config定义说明

base_url:网址 api:api目录,可支持多个目录,如定义根目录下api/userapi/common,填入[‘api’, ‘userapi’, ‘common’]即可

requestBase类方法说明:

  1. class requestBase(object):
  2. def set_session(self, client):
  3. # 设置客户端,locust压测时初始化使用
  4. def get_api(self, api_id):
  5. """
  6. 根据api_id获取api数据,返回request类,该类可直接传入execute方法进行运行
  7. """"
  8. def execute(self, request):
  9. """
  10. 发送请求
  11. :param request: 请求题
  12. """"
  13. def register_setup_hook(self, hook):
  14. """
  15. 注册前置钩子
  16. """"
  17. def register_teardown_hook(self, hook):
  18. """
  19. 注册后置钩子
  20. :param hook:
  21. :return:
  22. """
  23. def close_hook(self):
  24. """
  25. 关闭钩子执行,在钩子内调用请求的时候需要使用到,记得使用完成后开启钩子
  26. :return:
  27. """
  28. def open_hook(self):
  29. """
  30. 开启钩子执行
  31. :return:
  32. """

HOOK说明

当注册了hook之后,每次发送请求的时候都会去调hook,并传入一些对应参数,传参说明

  1. request
    1. 可选入参,用来获取并修改参数
  2. session
    1. 可选入参,返回的是一个requests.Request类,用于获取session,token等内容
  3. kwargs
    1. 可选入参,返回的是一个dict,包含我们在config内传入的所有参数

举例

  1. from autoTestScheme.case import Base
  2. class TestBase(Base):
  3. def setup_class(self):
  4. if self.settings.exists('request'):
  5. self.settings.request.register_setup_hook(self.test1)
  6. self.settings.request.register_setup_hook(self.test2)
  7. self.settings.request.register_setup_hook(self.test3)
  8. @classmethod
  9. def test1(self):
  10. self.logger.info('test1')
  11. @classmethod
  12. def test2(self, request, session, kwargs):
  13. request['params']['c_token'] = session.cookies.get("c_token")
  14. @classmethod
  15. def test3(self, request, session, kwargs):
  16. self.logger.info(kwargs)

注意1:hook是一个方法,当在类内的时候,方法如下

  1. class TestBase(Base):
  2. def setup_class(self):
  3. if self.settings.exists('request'):
  4. self.settings.request.register_setup_hook(self.test1)
  5. @classmethod
  6. def test1(self):
  7. self.logger.info('test1')
  8. # 调用类方法形式
  9. self.send_msg(self, 123)
  10. self.send_msg1(123)
  11. def send_msg(self, msg):
  12. print(msg)
  13. @classmethod
  14. def send_msg1(self, msg):
  15. print(msg)

注意2:hook的注册尽量不要放到pytest类的setup内,兼容问题