在作接口自動化測試的時候,總會遇到,因鏈接超時等錯誤致使,接口腳本失敗。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