與unittest不同,pytest使用的是python自帶的assert關鍵字來進行斷言
assert關鍵字後面可以接一個表達式,隻要表達式的最終結果為True,那麼斷言通過,用例執行成功,否則用例執行失敗
想在抛出異常之後輸出一些提示資訊,執行之後就友善檢視是什麼原因了
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' 也可以使用
代碼抛出異常,但是和raises指定的異常類相比對,是以不會斷言失敗
它相當于一個檢查異常裝飾器,功能:檢查是否有異常,不确定是否有異常
with pytest.raise(ZeroDivisionError) 對于故意測試異常代碼的情況,使用可能會更好
而@pytest.mark.xfail(raises=ZeroDivisionError)
對于檢查未修複的錯誤(即,可能會發生異常),使用檢查斷言可能會更好