使用裝飾器實現失敗的方法重試

2021-10-19 22:35:42 字數 1185 閱讀 5140

前幾天,遇到乙個人問我如果在自動化測試框架中,case失敗了需要重試要怎麼處理?我當時腦海中的第一反應,就是使用unittest自帶的失敗重試機制來實現。但是事後我查了一下,發現unittest並沒有這種機制,要是需要的話只能自己修改原始碼(最近在看這部分的原始碼,下次可以整理下這種方式來實現),所以我想到的第二個方法就是使用裝飾器

了。思路很簡單,可以概括為以下幾點:

1. 支援自定義失敗重試次數

2. 支援定義捕捉exception型別,通過使用 try 捕捉異常,當發現被修飾的方法出現指定的異常型別時就觸發重試,一直到指定的重試次數完成

下面就直接上**:

def fault_retry(**kw):  # 使用不定長的引數,方便日後擴充套件

def retry(*args, **kwargs):

try:

result = func(*args, **kwargs)

# 捕捉方法**現的 exception 型別異常,也可以自定義

except exception as ex:

if kw['re_num'] > 0:

print(f"失敗!原因為:")

print(f"正在重試第 次...\n")

kw['re_num'] -= 1

result = retry(*args, **kwargs)

else:

result = "重試結束!"

print(result)

return res

return retry

測試方法,我這裡模擬的是除數不能為0的錯誤:

@fault_retry(re_num=2)

def test():

num = int(input("請輸入除數:"))

a = 1/num

print(a)

if __name__ == '__main__':

test()

結果:

我這裡的例子只是實現了基本功能,具體的可以根據自己的需要去修改,比如把print改為統一的log輸出,或者新增 finally 語句塊來實現必須的一些邏輯處理等等。

裝飾器的實現

裝飾器 在flask框架裡面,通過裝飾器傳參實現動態建立字典,來完成路由的功能 def set value value def set fun func def call fun args,kwargs print 2019 value return func args,kwargs return ...

裝飾器的使用

import platform def judge platform func def add env parameter a,b if platform.system windows env windows else env linux return func env,a,b return add...

如何寫乙個公共的失敗重試方法

有時候請求失敗了可能需要重試,如何寫乙個公共的方法,只需考慮兩點 1.重試次數 重試次數比較簡單,作為方法引數,呼叫方傳來即可,然後按重試次數開啟迴圈,int即可。2.業務邏輯 業務邏輯處理對於重試方法而言並不關心,但是需要能夠得到乙個處理結果,並能根據處理結果告知是否執行成功,以便可以退出迴圈,c...