1. 程式人生 > 實用技巧 >跟阿斌一起學鴻蒙(4). 分散式Hello Harmony的N種寫法

跟阿斌一起學鴻蒙(4). 分散式Hello Harmony的N種寫法

前言

  • 與unittest不同,pytest使用的是python自帶的assert關鍵字來進行斷言
  • assert關鍵字後面可以接一個表示式,只要表示式的最終結果為True,那麼斷言通過,用例執行成功,否則用例執行失敗

assert小栗子

想在丟擲異常之後輸出一些提示資訊,執行之後就方便檢視是什麼原因了 # 異常資訊 def f(): return 3 def test_function(): a = f() assert a % 2 == 0, "判斷 a 為偶數,當前 a 的值為:%s" % a

執行結果

常用斷言

pytest 裡面斷言實際上就是 python 裡面的 assert 斷言方法,常用的有以下幾種
  • assert xx :判斷 xx 為真
  • assert not xx :判斷 xx 不為真
  • assert a in b :判斷 b 包含 a
  • assert a == b :判斷 a 等於 b
  • assert a != b :判斷 a 不等於 b

異常斷言

可以使用 pytest.raises 作為上下文管理器,當丟擲異常時可以獲取到對應的異常例項 # 斷言異常 def test_zero_division(): with pytest.raises(ZeroDivisionError): 1 / 0 斷言場景:斷言它拋的異常是不是預期想要的 程式碼執行:1/0 預期結果:拋的異常是ZeroDivisionError: division by zero 如何斷言:
通常是斷言異常的 type 和 value 值了 具體方式:這裡1/0 的異常型別是 ZeroDivisionError,異常的 value 值是 divisionby zero # 詳細斷言異常 def test_zero_division_long(): with pytest.raises(ZeroDivisionError) as excinfo: 1 / 0 # 斷言異常型別 type assert excinfo.type == ZeroDivisionError # 斷言異常 value 值 assert "division by zero" in str(excinfo.value)
excinfo:是一個異常資訊例項 主要屬性:.type、.value、.traceback 注意:斷言 type 的時候,異常型別是不需要加引號的,斷言 value值的時候需轉 str

拓展一:match

可以將match關鍵字引數傳遞給上下文管理器,以測試正則表示式與異常的字串表示形式是否匹配 注意:這種方法只能斷言value,不能斷言type # 自定義訊息 def test_zero_division_long(): with pytest.raises(ZeroDivisionError, match=".*zero.*") as excinfo: 1 / 0

match方法的regexp引數與re.search函式匹配,因此在上面的示例中match='zero'也可以使用

拓展二:檢查斷言裝飾器

# 斷言裝飾器 @pytest.mark.xfail(raises=ZeroDivisionError) def test_f(): 1 / 0

執行結果

知識點

  • 程式碼丟擲異常,但是和raises指定的異常類相匹配,所以不會斷言失敗
  • 它相當於一個檢查異常裝飾器,功能:檢查是否有異常,不確定是否有異常
  • with pytest.raise(ZeroDivisionError)對於故意測試異常程式碼的情況,使用可能會更好
  • @pytest.mark.xfail(raises=ZeroDivisionError)對於檢查未修復的錯誤(即,可能會發生異常),使用檢查斷言可能會更好

轉載自:https://www.cnblogs.com/poloyy/p/12641778.html
歡迎大家關注此博主!