天天看點

Pytest系列(2) - assert斷言詳細使用

與unittest不同,pytest使用的是python自帶的assert關鍵字來進行斷言

assert關鍵字後面可以接一個表達式,隻要表達式的最終結果為True,那麼斷言通過,用例執行成功,否則用例執行失敗

想在抛出異常之後輸出一些提示資訊,執行之後就友善檢視是什麼原因了

​​

Pytest系列(2) - assert斷言詳細使用

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 作為上下文管理器,當抛出異常時可以擷取到對應的異常執行個體

斷言場景:斷言它抛的異常是不是預期想要的

代碼執行:1/0

預期結果:抛的異常是ZeroDivisionError: division by zero

如何斷言:通常是斷言異常的 type 和 value 值了

具體方式:這裡 1/0 的異常類型是 ZeroDivisionError,異常的 value 值是 divisionby zero

excinfo :是一個異常資訊執行個體

主要屬性:.type 、 .value 、.traceback 

注意:斷言 type 的時候,異常類型是不需要加引号的,斷言 value值的時候需轉 str

可以将 match 關鍵字參數傳遞給上下文管理器,以測試正規表達式與異常的字元串表示形式是否比對

注意:這種方法隻能斷言value,不能斷言type

該 match 方法的regexp參數與 re.search  函數比對,是以在上面的示例中 match='zero' 也可以使用

Pytest系列(2) - assert斷言詳細使用
Pytest系列(2) - assert斷言詳細使用
Pytest系列(2) - assert斷言詳細使用

代碼抛出異常,但是和raises指定的異常類相比對,是以不會斷言失敗

它相當于一個檢查異常裝飾器,功能:檢查是否有異常,不确定是否有異常

with pytest.raise(ZeroDivisionError)  對于故意測試異常代碼的情況,使用可能會更好

而@pytest.mark.xfail(raises=ZeroDivisionError) 

對于檢查未修複的錯誤(即,可能會發生異常),使用檢查斷言可能會更好