01 pytest基礎(chǔ)-十分鐘之自動化

本文內(nèi)容概覽

image.png

pytest能實現(xiàn)的功能(簡介)

  1. 自動發(fā)現(xiàn)測試用例:pytest會自動查找項目中以test_test開頭的文件、以Test開頭的類和以test_test開頭的函數(shù),并執(zhí)行它們作為測試用例。

  2. 靈活的測試用例編寫:pytest允許使用簡潔的語法編寫測試用例悍赢,可以使用函數(shù)岛宦、類和裝飾器等方式組織測試代碼。這使得測試用例的編寫更加靈活和易于維護啊奄。

  3. 豐富的斷言庫:pytest提供了豐富的斷言方法纬朝,用于驗證測試結(jié)果是否符合預期收叶。這些斷言方法包括比較運算符、容器操作共苛、異常處理等判没。使用這些斷言方法可以編寫清晰、簡潔的斷言語句隅茎。

  4. 參數(shù)化測試(parametrize):pytest支持參數(shù)化測試澄峰,可以通過一次編寫多個測試用例,并使用不同的參數(shù)進行測試辟犀。這樣可以減少冗余的代碼俏竞,提高測試的覆蓋率。

  5. 豐富的插件生態(tài)系統(tǒng):pytest具有一個活躍的插件生態(tài)系統(tǒng)堂竟,可以通過安裝插件來擴展其功能魂毁。這些插件可以用于生成測試報告、集成持續(xù)集成工具出嘹、模擬網(wǎng)絡(luò)請求等席楚。插件的使用可以根據(jù)需求定制測試框架的功能。

  6. 并發(fā)執(zhí)行測試:pytest支持并發(fā)執(zhí)行測試用例疚漆,可以提高測試的效率酣胀。這對于大型項目和長時間運行的測試套件特別有用。

  7. 集成其他測試工具:pytest可以與其他測試工具(如Selenium娶聘、Mock等)進行集成,方便進行更復雜的測試場景甚脉。這樣可以擴展pytest的功能丸升,滿足特定的測試需求。

安裝

pip3 install -U pytest
image.png

顯示 Successfully installed 代表安裝好了
注意
如果安裝過慢可以更改下載源來增加下載安裝速度 這里可以更改安裝源(這里以清華源為例)
https://mirrors.tuna.tsinghua.edu.cn/help/pypi/

python -m pip install --upgrade pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

更改后再執(zhí)行 pip 安裝命令安裝即可

默認用例執(zhí)行規(guī)則

pytest會自動查找項目中以test_test開頭的文件牺氨、以Test開頭的類和以test_test開頭的函數(shù)狡耻,并將它們作為測試用例執(zhí)行墩剖。
pytest會遞歸地搜索項目目錄及其子目錄中的測試文件,找到所有符合命名規(guī)則的測試用例

總結(jié)就是

  1. 文件要以test_*.py*_test.py命名
  2. 測試類要以Test開頭
  3. 函數(shù)要以 test 或者 test_開頭

pycharm編寫運行第一個測試用例

"""編寫的第一個case"""
def test_01_case():
    print("test_01_case")


class TestFirstCase(object):    
    def test_class_case(self):
        print("test_class_case")

    def no_test_case(self):
        print("no_test_case")


def no_test_case2():
    print("no_test_case")

image.png

可以看到按照規(guī)則寫的pytest收集到并執(zhí)行了

運行方式

執(zhí)行的三種方式

  1. 命令行執(zhí)行
pytest + 執(zhí)行參數(shù)
py.test + 執(zhí)行參數(shù)
python -m pytest + 執(zhí)行參數(shù)

這里插播介紹兩個常用的執(zhí)行參數(shù) (-s -v)

允許直接打印測試函數(shù)中的輸出

pytest -s  # 允許直接打印測試函數(shù)中的輸出
image.png

顯示詳細的測試結(jié)果信息

pytest -v  
image.png
  1. py文件中調(diào)用
import pytest

if __name__ == '__main__':
    pytest.main(["執(zhí)行參數(shù)"])  // 列表中放執(zhí)行參數(shù) 
  1. pycharm 中執(zhí)行 (需要設(shè)置好pycharm的Default test runner)


    image.png

    image.png

運行規(guī)則

執(zhí)行文件夾下所有的case


pytest  /指定目錄
# 或者 cd到這個目錄下執(zhí)行 pytest
pytest 

執(zhí)行單個py文件

# 指定 pytest 具體的文件名
pytest test_xxx.py 

按節(jié)點nodeid運行(每個case代表一個節(jié)點nodeid)

  1. pytest 文件名::class::test_case (類的方式編寫的case)
  2. pytest 文件路徑/文件名::class::test_case
  3. pytest 文件名::test_case (函數(shù)方式編寫的case)
  4. pytest 文件路徑/文件名::test_case
 # 執(zhí)行類中具體的某一條case   
 pytest test_01_first_case.py::TestFirstCase::test_class_case                           
 # 執(zhí)行類
 pytest test_01_first_case.py::TestFirstCase
# 執(zhí)行某一條case
pytest test_01_first_case.py::test_01_case
# 執(zhí)行文件
pytest test_01_first_case.py

按關(guān)鍵詞運行

# 運行名稱包含 case但是不包含class的用例
pytest -k "case and not class" -v   

按照標記運行

這里不具體講 等到學習mark的時候再展開說

# 這樣就會運行 指定標記的case
pytest -m 標記 

斷言

斷言用于驗證測試結(jié)果是否符合預期
pytest的斷言比較簡單 直接使用python內(nèi)置的 assert 即可進行斷言
基本語法

assert 表達式 
  1. 當表達式結(jié)果為 True時 斷言通過
  2. 當表達式為False時 斷言失敗 本條case算是失敗 然后繼續(xù)跑后續(xù)的case
def test_01_case():
    print("test_01_case")
    assert 1 != 1   # 這里 1 != 1  結(jié)果是False 所以這條case失敗

這里 1 != 1 結(jié)果是False 所以這條case失敗


image.png

一些常用的斷言

  1. assert a >= b
  2. assert a == b
  3. assert len(a) == len(b) # 容器類的斷言(如列表夷狰、字典)
  4. assert a in b

附加知識:對于拋出的異常pytest允許使用pytest.raises裝飾器來斷言代碼是否拋出了預期的異常
例如岭皂,pytest.raises(ZeroDivisionError)用于斷言被裝飾的代碼塊是否拋出了0作為被除數(shù)的異常。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沼头,一起剝皮案震驚了整個濱河市爷绘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌进倍,老刑警劉巖土至,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異猾昆,居然都是意外死亡陶因,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門垂蜗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來楷扬,“玉大人,你說我怎么就攤上這事贴见『嫫唬” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵蝇刀,是天一觀的道長螟加。 經(jīng)常有香客問我,道長吞琐,這世上最難降的妖魔是什么捆探? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮站粟,結(jié)果婚禮上黍图,老公的妹妹穿的比我還像新娘。我一直安慰自己奴烙,他們只是感情好助被,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著切诀,像睡著了一般揩环。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幅虑,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天丰滑,我揣著相機與錄音,去河邊找鬼倒庵。 笑死褒墨,一個胖子當著我的面吹牛炫刷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播郁妈,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼浑玛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了噩咪?” 一聲冷哼從身側(cè)響起顾彰,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎剧腻,沒想到半個月后拘央,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡书在,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年灰伟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片儒旬。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡栏账,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出栈源,到底是詐尸還是另有隱情挡爵,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布甚垦,位于F島的核電站茶鹃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏艰亮。R本人自食惡果不足惜闭翩,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望迄埃。 院中可真熱鬧疗韵,春花似錦、人聲如沸侄非。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逞怨。三九已至者疤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叠赦,已是汗流浹背宛渐。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眯搭,地道東北人窥翩。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像鳞仙,于是被迫代替她去往敵國和親寇蚊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

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