pytest測(cè)試框架系列 - pytest 斷言assert使用

前言

  • 測(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é)果如下:

在這里插入圖片描述

歡迎您給我留言讼渊,我們一起討論。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尊剔,一起剝皮案震驚了整個(gè)濱河市爪幻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌须误,老刑警劉巖挨稿,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異京痢,居然都是意外死亡叶组,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門历造,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)甩十,“玉大人,你說(shuō)我怎么就攤上這事吭产÷录啵” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵臣淤,是天一觀的道長(zhǎng)橄霉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)邑蒋,這世上最難降的妖魔是什么姓蜂? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮医吊,結(jié)果婚禮上钱慢,老公的妹妹穿的比我還像新娘。我一直安慰自己卿堂,他們只是感情好束莫,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布旱捧。 她就那樣靜靜地躺著诉植,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缕陕。 梳的紋絲不亂的頭發(fā)上疲迂,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天放典,我揣著相機(jī)與錄音晒衩,去河邊找鬼涌攻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛怀各,可吹牛的內(nèi)容都是我干的栗竖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼渠啤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了添吗?” 一聲冷哼從身側(cè)響起沥曹,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碟联,沒想到半個(gè)月后妓美,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鲤孵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年壶栋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片普监。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贵试,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凯正,到底是詐尸還是另有隱情毙玻,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布廊散,位于F島的核電站桑滩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏允睹。R本人自食惡果不足惜运准,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缭受。 院中可真熱鬧胁澳,春花似錦、人聲如沸米者。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至陆盘,卻和暖如春普筹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背隘马。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工太防, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人酸员。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓蜒车,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親幔嗦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酿愧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容