編寫裝飾器實現python請求錯誤重試功能

在作接口自動化測試的時候,總會遇到,因鏈接超時等錯誤致使,接口腳本失敗。python

官方給出的方法:app

max_retries=5 出錯重試5次
注意的是,這個只對DNS,鏈接錯誤進行重試。
    from requests.adapters import HTTPAdapter
    s = requests.Session()
    s.mount('http://',HTTPAdapter(max_retries=5))
    s.mount('https://',HTTPAdapter(max_retries=5))
    s.get('https://www.baidu.com')

 

 

自編寫裝飾器一函數

from requests.exceptions import ConnectionError
import requests
def retry(**kw):
    def war(func):
        def w(*args,**kwargs):
            try:
                ret = func(*args,**kwargs)
            except ConnectionError:
                kw['reNum'] = int(kw['reNum']) - 1
                if kw['reNum'] >=0:
                    print kw['reNum']
                    ret = w(*args,**kwargs)
                else:
                    ret = ConnectionError
            return ret
        return w
    return war

 

自編寫裝飾器二測試

from requests.exceptions import ConnectionError

def retry(**kw):
    def wrapper(func):
        def _wrapper(*args,**kwargs):
            raise_ex = None
            for _ in range(kw['reNum']):
                print _
                try:
                    return func(*args,**kwargs)
                except ConnectionError as ex:
                    raise_ex = ex
            #raise raise_ex
        return _wrapper
    return wrapper

 

使用方法:reNum = 5 表明,出現ConnectionError時最多可重試5次。spa

@retry(reNum=5)
def demo():
    raise ConnectionError

 

總結:code

1.編寫裝飾器,其實沒有那麼難,只要掌握方法。 這個能夠參考,我以前寫的關於裝飾器的文章blog

2.裝飾器的通熟解釋,就是在函數以前後以後作點什麼。經過這個咱們能夠作不少。接口

3.關於請求鏈接錯誤,重試,裝飾器;原理就是作一個循環,只要捕獲到有ConnectionError 錯誤,就進入下一次循環get

調用;只要有正確的時候,直接返回函數。requests

 

qq技術交流羣,期待你的加入:

python|測試|技術交流羣:563227894

python|測試|技術交流羣:563227894

python|測試|技術交流羣:563227894

相關文章
相關標籤/搜索