Python實踐3-Tenacity提高自動測試健壯性

在自動化測試工具和自動化測試用例開發過程中,經常需要處理一些待操作對象不穩定的情況,例如,某些界面元素不能及時出現,某些服務暫時不可用。這個時候,測試代碼必須想方設法應對這種情況,以便提高工具和用例的健壯性,最常見的解決方法就是進行重試:當特定條件不滿足的時候,等待一段時間,然後再次嘗試,直到期望的條件滿足繼續運行,或者重試到達一定數目拋出異常退出。

下面是一種常用的重試代碼樣板.

def do_something_unreliable(retry=10):n for i in range(retry):n try:n if random.randint(0, 10) > 1:n raise IOError("Unstable status, try again")n else:n print("Get stable result")n returnn except Exception as e:n print(e.message)n

其實,已經有高人開發了一個名叫Tenacity的Python庫,幫我們優雅地搞定這些需要重試的情況了,使用起來非常簡單。

我們可以用pip install tenacity來安裝這個庫,然後用@retry裝飾器來重構上面的代碼。

from tenacity import retryn@retryndef do_something_unreliable():n if random.randint(0, 10) > 1:n raise IOError("Unstable status, try again")n else:n print("Get stable result")n

上面的例子,實現了遇到異常就重試,如果想要限制重試次數,只需要修改@retry裝飾器那一行即可。

from tenacity import retry, stop_after_attemptn@retry(stop=stop_after_attempt(3))n

如果想要每5秒鐘重試一次

from tenacity import retry, wait_fixedn@retry(wait=wait_fixed(5))n

上面這些,僅僅是tenacity最簡單的使用方法,其他重試的方式還有很多種,大家可以訪問tenacity.readthedocs.io 找到更多的使用方法。

當然,看到好東西,就應該把它用起來,今天我已經把常用的多節點存活狀態採集的自動化工具用tenacity改進了一版,以前必須要用較長的超時機制(requests的timeout參數)來對抗網路異常,現在只新加兩行代碼,就大大縮短了統計時間,增強了健壯性,優雅地不得了。

代碼下載

本文code已經歸檔到github,您可以訪問下面的鏈接獲得。歡迎star該代碼倉庫。

代碼地址

如果覺得本文對您有幫助,敬請點贊。

推薦閱讀:

selenium自動化測試入門 python unittest單元測試框架
WEB自動化3:準備Selenium環境
該怎麼樣才能讓所有測試人員迅速學會自動化測試呢?
[貝聊科技]Appium 元素定位方式大揭秘
[從入門到不放棄]多瀏覽器的自動化測試(2)-雲服務測試

TAG:Python | 自动化测试 | 软件测试 |