#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/6/29 1:39 下午
# @Author : CrissChan
# @Site : https://blog.csdn.net/crisschan
# @File : __init__.py.py
# @Software: 創建一個更適合測試使用的http協議類
from requests_toolbelt import sessions
from requests.adapters import HTTPAdapter
from ..CONFIG import MAX_RETRIES,DEFAULT_TIMEOUT
class ReTriesHTTPAdapter(HTTPAdapter):
"""設置HTTP失敗重跑次數類"""
def __init__(self,*arg,**kwargs):
"""
設置HTTP失敗重跑次數類,重跑次數MAX_RETRIES在CONFIG裡面設置
"""
if "max_retries" not in kwargs:
kwargs["max_retries"]= MAX_RETRIES
super().__init__(*arg,**kwargs)
class TimeoutHTTPAdapter(HTTPAdapter):
"""HTTP訪問請求等待時間,等同於思考時間"""
def __init__(self, *args, **kwargs):
self.timeout = DEFAULT_TIMEOUT
if "timeout" in kwargs:
self.timeout = kwargs["timeout"]
del kwargs["timeout"]
super().__init__(*args, **kwargs)
def send(self, request, **kwargs):
timeout = kwargs.get("timeout")
if timeout is None:
kwargs["timeout"] = DEFAULT_TIMEOUT
return super().send(request, **kwargs)
class Httper(sessions.BaseUrlSession):
def __init__(self,base_url):
self.base_url=base_url
super(Httper, self).__init__(base_url=base_url)
self.__retries()
self.__timeout()
def __retries(self):
"""
設置失敗重跑次數,如果本次http請求失敗了,重試次
"""
readapter = ReTriesHTTPAdapter()
return super().mount("http://",readapter)
def __timeout(self):
"""
設置請求超市時間,和測試中的thinktime一樣
"""
tadapter = TimeoutHTTPAdapter()
return super(Httper, self).mount("http://",tadapter)
def get_cookies(self):
return self.cookies