一纱皆、前言
學(xué)習(xí)pytest總會習(xí)慣性的和unittest對比使用砌滞,自然就斷言pytest和unittest也是有些區(qū)別的镰踏。
二歇父、斷言對比
unittest 斷言
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 斷言
pytest只需要用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示例代碼
# -*- coding: utf-8 -*-
# @Time : xxx
# @Author : cr
# @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整除庶骄,當(dāng)前 n 的值為:%s" % n
四毁渗、執(zhí)行結(jié)果
pytest -v test_assert.py
五、異常斷言
結(jié)合pytest 斷言特點和《Pytest之使用斷言指定異车サ螅》灸异,再來一個異常的案例,比如除數(shù)不能為零羔飞,示例代碼如下:
# 異常斷言
# 異常斷言
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肺樟,來捕獲對應(yīng)的異常示例,exceptionInfo為一個對象示例來接收屬性信息逻淌,通常是斷言異常的 type 和 value 值
1么伯、使用match斷言
match 關(guān)鍵字是測試正則表達式與異常的字符串表示形式是否匹配
這種方法只能斷言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參數(shù)與 re.search 函數(shù)匹配卡儒,因此在上面的示例中 match='zero' 也可以使用
2田柔、檢查斷言裝飾器使用
示例代碼如下:
# 斷言裝飾器
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_f():
1 / 0
個人覺得這個斷言裝飾器,和java的注解類似骨望,相對更輕量快捷
3硬爆、執(zhí)行結(jié)果
知識點
代碼拋出異常,但是和raises指定的異常類相匹配擎鸠,所以不會斷言失敗
它相當(dāng)于一個檢查異常裝飾器缀磕,功能:檢查是否有異常,不確定是否有異常
with pytest.raise(ZeroDivisionError) 對于故意測試異常代碼的情況劣光,使用可能會更好
而@pytest.mark.xfail(raises=ZeroDivisionError) 對于檢查未修復(fù)的錯誤(即袜蚕,可能會發(fā)生異常),使用檢查斷言可能會更好
參考鏈接
https://www.cnblogs.com/longronglang/p/13848899.html
系列參考文章:
https://www.cnblogs.com/poloyy/category/1690628.html