前言
- 測(cè)試用例的預(yù)期結(jié)果是用例不可缺少的一部分厂庇,那么斷言就是自動(dòng)化測(cè)試不可缺少的一步,一個(gè)沒有斷言的用例,自動(dòng)化測(cè)試的就沒有意義了口叙。那什么是斷言呢?
- 簡(jiǎn)單來(lái)講就是實(shí)際結(jié)果和期望結(jié)果去對(duì)比嗅战,符合預(yù)期那就測(cè)試pass妄田,不符合預(yù)期那就測(cè)試 failed
- Pytest里面使用關(guān)鍵字assert,斷言為一個(gè)表達(dá)式驮捍,只要表達(dá)式的最終結(jié)果為True疟呐,那么斷言通過(guò),用例執(zhí)行成功东且,否則用例執(zhí)行失敗
Assert 常用斷言方式
pytest里面斷言實(shí)際上就是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
示例:
# _*_coding:utf-8 _*_
# @Time :2021/7/2 21:27
# @Author : king
# @File :test_assert.py
# @Software :PyCharm
# @blog :https://blog.csdn.net/u010454117
# @WeChat Official Account: 【測(cè)試開發(fā)知識(shí)庫(kù)】
import pytest
def func(a):
if a > 2:
return True
else:
return False
def test_01():
"""斷言xx為真"""
a = 3
b = 1
assert func(a)
def test_02():
"""斷言 b 包含 a"""
a = "king"
b = "hello king"
assert a in b
def test_03():
"""斷言相等"""
a = "king"
b = "king"
assert a == b
def test_04():
"""斷言不等于"""
a = 1
b = 2
assert a != b
if __name__ == "__main__":
pytest.main()
命令行輸入: pytest -s test_assert.py
執(zhí)行結(jié)果如下:
斷言示例
注意:用例如果沒有斷言且運(yùn)行正常,測(cè)試結(jié)果為pass
那么斷言都能正常進(jìn)行嗎苇倡?所以接下來(lái)我們講解一下異常斷言
Pytest 異常斷言Excepiton
- 除了支持對(duì)代碼正常運(yùn)行的結(jié)果斷言之外富纸,Pytest也能夠?qū)?Exception 和 Warnning 進(jìn)行斷言,來(lái)斷定某種條件下旨椒,一定會(huì)出現(xiàn)某種異诚剩或者警告。在功能測(cè)試和集成測(cè)試中综慎,這兩類斷言用的不多涣仿,這里簡(jiǎn)單介紹一下。
對(duì)于異常的斷言,Pytest的語(yǔ)法是:with pytest.raises(異常類型)好港,可以看下面的這個(gè)例子:
def test_zero_division():
with pytest.raises(ZeroDivisionError):
1 / 0
這個(gè)測(cè)試用例斷言運(yùn)算表達(dá)式1除以0會(huì)產(chǎn)生ZeroDivisionError異常愉镰。除了對(duì)異常類型進(jìn)行斷言,還可以對(duì)異常信息進(jìn)行斷言钧汹,比如:
# _*_coding:utf-8 _*_
# @Time :2021/7/2 21:43
# @Author : king
# @File :test_except_assert.py
# @Software :PyCharm
# @blog :https://blog.csdn.net/u010454117
# @WeChat Official Account: 【測(cè)試開發(fā)知識(shí)庫(kù)】
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)
命令行輸入: pytest -s test_except_assert.py
執(zhí)行結(jié)果如下:
異常信息和類型斷言
這個(gè)測(cè)試用例丈探,就斷言了excinfo.value的內(nèi)容中包含division by zero這個(gè)字符串,這在需要斷言具體的異常信息時(shí)非常有用拔莱。
關(guān)于更多的Exception和Warnning的斷言可以參考Pytest的官方文檔:
Exception和Warnning的斷言 Pytest的官方文檔
我們?cè)賮?lái)看下下面這個(gè)斷言失敗你發(fā)現(xiàn)啥了呢碗降?
斷言失敗
從這個(gè)斷言看出來(lái),斷言失敗提示信息是不是對(duì)我們不太友好塘秦,不是很明顯
優(yōu)化斷言提示信息
def test_assert_fail():
a = 2
b = 3
assert a == b, "判斷 a 和 b 是否相等 a:{} b: {}".format(a, b)
命令行輸入: pytest -s test_assert_fail.py
執(zhí)行結(jié)果如下:
在這里插入圖片描述
歡迎您給我留言讼渊,我們一起討論。