Python unittest

一吼蚁、簡(jiǎn)介

unittest是python自帶的單元測(cè)試框架

主要有以下幾個(gè)概念:
1煤搜、test fixture:初始化和清理 測(cè)試數(shù)據(jù)、以及環(huán)境祠丝,比如在用例執(zhí)行前創(chuàng)建臨時(shí)文件和文件夾,糠馆,或者代理數(shù)據(jù)庫(kù)嘶伟、目錄,又或者啟動(dòng)服務(wù)器進(jìn)程

最簡(jiǎn)單的實(shí)現(xiàn)方式是通過(guò)自定義下面的2個(gè)方法:

  • TestCase.setUp():在每個(gè)測(cè)試方法運(yùn)行之前都會(huì)運(yùn)行一次又碌,適合為每個(gè)用例都初始化一遍數(shù)據(jù)九昧,有幾個(gè)以test開頭的方法就執(zhí)行幾次
  • TestCase.tearDown():在每個(gè)測(cè)試方法運(yùn)行之后都會(huì)運(yùn)行一次,適合為每個(gè)用例都清理一遍數(shù)據(jù)

2毕匀、test case:測(cè)試用例
所有的測(cè)試類都必須直接或間接的繼承自u(píng)nittest.TestCase類

3铸鹰、test suite:用例集合,組合起來(lái)批量執(zhí)行

4期揪、test runner:運(yùn)行用例并返回結(jié)果掉奄,可以使用圖形界面规个、文本界面凤薛,或者返回一個(gè)特殊值來(lái)指示執(zhí)行測(cè)試的結(jié)果

注意點(diǎn):測(cè)試用例中方法名需要以test開頭,不然是不會(huì)被test runner執(zhí)行的

二诞仓、用法

前置條件:在創(chuàng)建測(cè)試用例之前需要導(dǎo)入unittest

1個(gè)測(cè)試用例類下面可以有多個(gè)測(cè)試方法(test)或者叫做測(cè)試點(diǎn)缤苫,如下就有3個(gè)用例,其中TestStringMethods繼承了unittest.TestCase墅拭,實(shí)際工作中我們會(huì)寫test_case1活玲、test_case2......

import unittest


class TestStringMethods(unittest.TestCase):       # 定義測(cè)試類

    def test_upper(self):
         self.assertEqual('foo'.upper(), 'FOO')

     def test_isupper(self):
         self.assertTrue('FOO'.isupper())
         self.assertFalse('Foo'.isupper())

     def test_spilt(self):
         s = 'hello world'
         self.assertEqual(s.split(), ['hello', 'world'])
         with self.assertRaises(TypeError):
             s.split(2)


if __name__ == "__main__":
    unittest.main()
    # suite = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)
    # unittest.TextTestRunner(verbosity=2).run(suite)

斷言
在開發(fā)一個(gè)程序的時(shí)候,與其讓它運(yùn)行時(shí)崩潰谍婉,不如在它出現(xiàn)錯(cuò)誤條件時(shí)就返回錯(cuò)誤舒憾,所以斷言是測(cè)試用例的核心,常見(jiàn)的就是assert斷言穗熬,一般來(lái)說(shuō)每個(gè)測(cè)試方法里都必須有斷言

比如判斷接口通不通镀迂,返回值對(duì)不對(duì),錯(cuò)誤描述信息是否一致等等唤蔗,我常用的就是下面2種:

  • assertEqual(first, second, msg=message)
  • assertNotEqual(first, second, msg=message)

斷言第一個(gè)參數(shù)和第二個(gè)參數(shù)是否相等探遵,如果相等,則輸出OK信息妓柜,若不相等則測(cè)試失敗箱季。其中 msg 為可選參數(shù),用于輸出測(cè)試失敗時(shí)提示信息棍掐。

self.assertEqual(response.get('success'), True)
self.assertEqual(form.external_id.data, response_external_id, msg=message.to_str('業(yè)務(wù)邏輯錯(cuò)誤'))
  • 調(diào)用assertEqual()來(lái)檢查預(yù)期結(jié)果;
  • assertTrue()或assertFalse()來(lái)驗(yàn)證條件;
  • assertRaises()來(lái)驗(yàn)證是否引發(fā)了特定的異常藏雏。
    使用上述方法而不是assert語(yǔ)句,是為了測(cè)試運(yùn)行程序可以累積所有測(cè)試結(jié)果并生成報(bào)告作煌。

其余用法可參考博客園上的一篇文章 https://www.cnblogs.com/feiyueNotes/p/7788995.html

運(yùn)行case

全局:unittest.main
或者下面的
suite = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)
unittest.TextTestRunner(verbosity=2).run(suite)

有時(shí)候case執(zhí)行時(shí)只是入?yún)⒅底兓蚺梗Y(jié)果都是一樣
這時(shí)我們可以采用入?yún)?shù)化的方式蝠嘉,借助parameterizd

但是uniittest框架不支持裝飾器,故只有使用@parameterized.expand創(chuàng)建的測(cè)試才會(huì)被執(zhí)行

@parameterized.expand([
    ('-9999', ''),
    ('', '-9999'),
    ('-8888', '-9999'),
])
def test_case_1(self, aaa, bbb):
    ****
    代碼此處省略
    ****

參數(shù)化的case執(zhí)行:生成測(cè)試集然后運(yùn)行

if __name__ == '__main__':
   suite = unittest.TestSuite(Classname, "test_case_n")
   runner = unittest.TextTestResult()
   runner.run(suite)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末杯巨,一起剝皮案震驚了整個(gè)濱河市蚤告,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌服爷,老刑警劉巖杜恰,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異仍源,居然都是意外死亡心褐,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門笼踩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)逗爹,“玉大人,你說(shuō)我怎么就攤上這事嚎于【蚨” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵于购,是天一觀的道長(zhǎng)袍睡。 經(jīng)常有香客問(wèn)我,道長(zhǎng)肋僧,這世上最難降的妖魔是什么斑胜? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮嫌吠,結(jié)果婚禮上止潘,老公的妹妹穿的比我還像新娘。我一直安慰自己辫诅,他們只是感情好凭戴,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泥栖,像睡著了一般簇宽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吧享,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天魏割,我揣著相機(jī)與錄音,去河邊找鬼钢颂。 笑死钞它,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播遭垛,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼尼桶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了锯仪?” 一聲冷哼從身側(cè)響起泵督,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎庶喜,沒(méi)想到半個(gè)月后小腊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡久窟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年秩冈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斥扛。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡入问,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出稀颁,到底是詐尸還是另有隱情芬失,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布峻村,位于F島的核電站麸折,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏粘昨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一窜锯、第九天 我趴在偏房一處隱蔽的房頂上張望张肾。 院中可真熱鬧,春花似錦锚扎、人聲如沸吞瞪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)芍秆。三九已至,卻和暖如春翠勉,著一層夾襖步出監(jiān)牢的瞬間妖啥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工对碌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荆虱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像怀读,于是被迫代替她去往敵國(guó)和親诉位。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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

  • Python unittest 學(xué)習(xí) [[toc]] 前言 由于目前項(xiàng)目需要做接口測(cè)試菜枷,故特意去學(xué)習(xí)了Python...
    Alex_6c08閱讀 1,061評(píng)論 0 1
  • 版權(quán)聲明:本文為博主原創(chuàng)文章苍糠,轉(zhuǎn)載請(qǐng)標(biāo)明原文地址,謝謝 ^_^ https://blog.csdn.net/xia...
    小娟_bb93閱讀 646評(píng)論 0 0
  • Startup 單元測(cè)試的核心價(jià)值在于兩點(diǎn): 更加精確地定義某段代碼的作用啤誊,從而使代碼的耦合性更低 避免程序員寫出...
    wuwenxiang閱讀 10,104評(píng)論 1 27
  • unittest基本原理 整個(gè)平臺(tái)的搭建使用的是python的unittest測(cè)試框架椿息,這里簡(jiǎn)單介紹下unitte...
    紫Qi閱讀 3,330評(píng)論 1 2
  • 第一次我遇見(jiàn)你,天空下著小雨坷衍。你躲進(jìn)我傘下寝优,讓我迷戀你。自從相遇那天起枫耳,我們彼此相依乏矾。 曾經(jīng)...
    落寞心閱讀 292評(píng)論 0 0