一、前言
斷言是自動化測試基本最重要的一步,一個用例沒有斷言,就等於失去自動化測試的意義了。什么是斷言呢?
簡單來講就是實際結果和期望結果去對比,符合預期就測試pass,不符合預期結果就測試failed
二、assert
pytest允許您使用標准python斷言來驗證python測試中的期望和值。例如
def f(): return 3 def test_function(): assert f()==4
運行結果:
從報錯信息可以看到斷言失敗原因:E assert 3 == 4
三、異常信息
接下來再看一個案例,如果想在異常的時候,輸出一些提示信息,這樣報錯后就知道什么原因了
def f(): return 3 def test_function(): a=f() assert a%2==0,"判斷a為偶數,當前a的值為:%s"%a
運行結果:
這樣當斷言失敗的時候,會給出自己寫的失敗原因了
E AssertionError: 判斷a為偶數,當前a的值為:3
四、異常斷言
為了寫關於引發異常的斷言,可以使用pytest.raises作為上下文管理器,如下
import pytest def test_zero_division(): with pytest.raises(ZeroDivisionError): 1/0
運行結果:
如果我們要斷言它拋的異常是不是預期的,比如執行:1/0,預期結果是拋異常:ZeroDivisionError:dision by zero,那我們要斷言這個異常,通常是斷言異常的type和value值了。
這里1/0的異常類型是ZeroDivisionError,異常的value值是division by zero,於是用例可以這樣設計。
import pytest def test_zero_division(): """斷言異常""" 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
五、常用斷言
pytest里面斷言實際上就是python里面的assert斷言方法,常用的有以下幾種
1.assert xx判斷xx為真
2.assert not xx判斷xx不為真
3.assert a in b 判斷b包含a
4.assert a == b 判斷a等於b
5.assert a != b 判斷a不等於b
import pytest def is_true(a): if a>0: return True else: return False def test_01(): """斷言xx為真""" a = 5 b = -1 assert is_true(a) assert not is_true(b) # 一個用例可以支持多個斷言 def test_02(): """斷言b包含a""" a = "hello" b = "hello world" assert a in b def test_03(): """斷言相等""" a = "bibi" b = "bibi" assert a == b def test_04(): """斷言不等於""" a = 5 b = 6 assert a != b if __name__ == "__main__": pytest.main(["-s","test_assert4.py"])
參考文章:https://www.jianshu.com/p/983412a7c2ae