學習pytest總會習慣性的和unittest對比使用,天然就斷言pytest和unittest也是有些區別的。html
assertEqual(a, b) # 判斷a和b是否相等 assertNotEqual(a, b) # 判斷a不等於b assertTrue(a) # 判斷a是否爲Ture assertFalse(a) #判斷a是否爲False assertIn(a, b) # a 包含在b裏面 asserNotIn(a, b) # a 不包含在b裏面
pytest只須要用assert來斷言就行,相對更簡單而便捷java
assert xx :判斷 xx 爲真 assert not xx :判斷 xx 不爲真 assert a in b :判斷 b 包含 a assert a == b :判斷 a 等於 b assert a != b :判斷 a 不等於 b
# -*- coding: utf-8 -*- # @Time : 2020/10/20 19:37 # @Author : longrong.lang # @FileName: test_assert.py # @Software: PyCharm # @Cnblogs :https://www.cnblogs.com/longronglang def f(): return 5; def test_f(): n = f() assert n % 3 == 0, "判斷n 是否能被3整除,當前 n 的值爲:%s" % n
結合pytest 斷言特色和《Pytest之使用斷言指定異常》,再來一個異常的案例,好比除數不能爲零,示例代碼以下:python
# 異常斷言 # 異常斷言 def test_zero_division(): with pytest.raises(ZeroDivisionError) as exceptionInfo: 100 / 0 # 斷言異常類型 assert exceptionInfo.type == ZeroDivisionError # 斷言異常的值 assert "division by zero" in str(exceptionInfo.value)
使用pytest.raises,來捕獲對應的異常示例,exceptionInfo爲一個對象示例來接收屬性信息,一般是斷言異常的 type 和 value 值正則表達式
示例代碼以下:函數
# match的使用 def test_zero_division_match(): with pytest.raises(ZeroDivisionError, match=".*zero.*") as exceptionInfo: 100 / 0 # 也能夠這樣 with pytest.raises(ZeroDivisionError, match="zero") as exceptionInfo: 100 / 0
match 方法的regexp參數與 re.search 函數匹配,所以在上面的示例中 match='zero' 也可使用學習
示例代碼以下:測試
# 斷言裝飾器 @pytest.mark.xfail(raises=ZeroDivisionError) def test_f(): 1 / 0
我的以爲這個斷言裝飾器,和java的註解相似,相對更輕量快捷code
代碼拋出異常,可是和raises指定的異常類相匹配,因此不會斷言失敗
它至關於一個檢查異常裝飾器,功能:檢查是否有異常,不肯定是否有異常
with pytest.raise(ZeroDivisionError) 對於故意測試異常代碼的狀況,使用可能會更好
而@pytest.mark.xfail(raises=ZeroDivisionError) 對於檢查未修復的錯誤(即,可能會發生異常),使用檢查斷言可能會更好regexp
裝飾器這部分還沒學習,後續繼續更新,先放一放htm
系列參考文章:
https://www.cnblogs.com/poloyy/category/1690628.html