python的unittest框架理論基礎(chǔ)

Unittest核心工作原理

最核心的四個(gè)概念:test case ,test suite,test runner,test fixture

一個(gè)TestCase實(shí)例就是一個(gè)測(cè)試用例

測(cè)試用例:指一個(gè)完成的測(cè)試流程,包括測(cè)試前環(huán)境搭建(setup)栗弟,執(zhí)行測(cè)試代碼(run)碰纬,測(cè)試后環(huán)境還原(tearDown)。

一個(gè)測(cè)試用例是一個(gè)完整的測(cè)試單元,執(zhí)行這個(gè)單元才睹,驗(yàn)證某個(gè)問題

多個(gè)測(cè)試用例集合在一起就是TestSuite,并且TestSuite可以嵌套TestSuite

TestLoader用來(lái)加載TestCase到TestSuite中表制,loadTestsFrom_()方法,是從各個(gè)地方查找TestCase,創(chuàng)建它們的實(shí)例埋泵,然后add到TestSuite中幔欧,再返回一個(gè)TestSuite實(shí)例

TextTestRunner用來(lái)執(zhí)行測(cè)試用例,其中run(test)會(huì)執(zhí)行TestSuite/TestCase中的run(result)方法丽声。測(cè)試結(jié)果保存到TextTestResult實(shí)例中礁蔗,包括運(yùn)行了多少測(cè)試用例,成功和失敗各有多少等信息

對(duì)一個(gè)測(cè)試用例環(huán)境的搭建和銷毀是一個(gè)fixture

一個(gè)class繼承了unittest.TestCase雁社,就是一個(gè)測(cè)試用例浴井,如果有很多以test開頭的方法,每個(gè)方法在load的時(shí)候便會(huì)生成一個(gè)TestCase實(shí)例霉撵,如:一個(gè)class中有四個(gè)test_xxx方法磺浙,最后在load到suite中也會(huì)有四個(gè)測(cè)試用例

整個(gè)流程如下:

寫好TestCase洪囤,然后由Testloader加載TestCase到TestSuite,然后由TextTestRunner來(lái)運(yùn)行TestSuite,運(yùn)行的結(jié)果保存在TextTestResult中

通過命令或者unittest.main()執(zhí)行時(shí),main會(huì)調(diào)用TextTestRunner中的run來(lái)執(zhí)行撕氧,或者直接通過TextTestRunner來(lái)執(zhí)行用例

說明:在runner執(zhí)行時(shí)瘤缩,默認(rèn)將結(jié)果輸出到控制臺(tái),可以設(shè)置輸出到文件中伦泥,然后在文件中查看剥啤;另外HTMLTestRunner也同樣是執(zhí)行用的,它可以將結(jié)果輸出到html中不脯,它跟TextTestRunner是一樣的府怯,但是它生成的報(bào)告更清晰好看


注意:1.運(yùn)行時(shí)不要把文件放在中文目錄下 2.編碼縮進(jìn)格式要注意否則會(huì)有錯(cuò)誤,該縮進(jìn)的要縮進(jìn)防楷,該頂格的要頂格寫



關(guān)鍵字解釋

TestLoader:測(cè)試用例加載器牺丙,其包括多個(gè)加載測(cè)試用例的方法。返回一個(gè)測(cè)試套件

loadTestsFromModule(self,module)--根據(jù)給定的模塊實(shí)例來(lái)獲取測(cè)試用例套件

loadTestsFromTestCase(self,testCaseClass)--根據(jù)給定的測(cè)試類复局,獲取其中的所有測(cè)試方法冲簿,并返回一個(gè)測(cè)試套件

loadTestsFromName(self,name,module=None)

--根據(jù)給定的字符串來(lái)獲取測(cè)試用例套件字符串可以是模塊名肖揣,測(cè)試類名民假,測(cè)試類中的測(cè)試方法名或者一個(gè)可調(diào)用的是實(shí)例對(duì)象

這個(gè)實(shí)例對(duì)象返回一個(gè)測(cè)試用例或一個(gè)測(cè)試套件

loadTestsFromNames(self,names,module=None) --和上面功能相同龙优,只不過接受的是字符串列表

setUp()和tearDown()兩個(gè)方法(其實(shí)是重寫了TestCase的這兩個(gè)方法)羊异,這兩個(gè)方法在每個(gè)測(cè)試方法執(zhí)行前以及執(zhí)行后執(zhí)行一次,setUp用來(lái)為測(cè)試準(zhǔn)備環(huán)境彤断,tearDown用來(lái)清理環(huán)境野舶,已備之后的測(cè)試。

setUpClass()與tearDownClass():如果想要在所有case執(zhí)行之前準(zhǔn)備一次環(huán)境宰衙,并在所有case執(zhí)行結(jié)束之后再清理環(huán)境平道,我們可以用setUpClass()與tearDownClass():

關(guān)鍵字的關(guān)系圖


總結(jié)如下:

1.unittest是Python自帶的單元測(cè)試框架,我們可以用其來(lái)作為我們自動(dòng)化測(cè)試框架的用例組織執(zhí)行框架供炼。

2.unittest的流程:寫好TestCase一屋,然后由TestLoader加載TestCase到TestSuite,然后由TextTestRunner來(lái)運(yùn)行TestSuite袋哼,運(yùn)行的結(jié)果保存在TextTestResult中冀墨,我們通過命令行或者unittest.main()執(zhí)行時(shí),main會(huì)調(diào)用TextTestRunner中的run來(lái)執(zhí)行涛贯,或者我們可以直接通過TextTestRunner來(lái)執(zhí)行用例诽嘉。

3.一個(gè)class繼承unittest.TestCase即是一個(gè)TestCase,其中以test開頭的方法在load時(shí)被加載為一個(gè)真正的TestCase。

4.verbosity參數(shù)可以控制執(zhí)行結(jié)果的輸出虫腋,0是簡(jiǎn)單報(bào)告骄酗、1是一般報(bào)告、2是詳細(xì)報(bào)告悦冀。

5.可以通過addTest和addTests向suite中添加case或suite趋翻,可以用TestLoader的loadTestsFrom__()方法。

6.用setUp()雏门、tearDown()嘿歌、setUpClass()以及tearDownClass()可以在用例執(zhí)行前布置環(huán)境,以及在用例執(zhí)行后清理環(huán)境

7.我們可以通過skip茁影,skipIf,skipUnless裝飾器跳過某個(gè)case丧凤,或者用TestCase.skipTest方法募闲。

8.參數(shù)中加stream,可以將報(bào)告輸出到文件:可以用TextTestRunner輸出txt報(bào)告愿待,以及可以用HTMLTestRunner輸出html報(bào)告浩螺。



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仍侥,隨后出現(xiàn)的幾起案子要出,更是在濱河造成了極大的恐慌,老刑警劉巖农渊,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件患蹂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡砸紊,警方通過查閱死者的電腦和手機(jī)传于,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)醉顽,“玉大人沼溜,你說我怎么就攤上這事∮翁恚” “怎么了系草?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)唆涝。 經(jīng)常有香客問我找都,道長(zhǎng),這世上最難降的妖魔是什么石抡? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任檐嚣,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嚎京。我一直安慰自己嗡贺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布鞍帝。 她就那樣靜靜地躺著诫睬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帕涌。 梳的紋絲不亂的頭發(fā)上摄凡,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音蚓曼,去河邊找鬼亲澡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛纫版,可吹牛的內(nèi)容都是我干的床绪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼其弊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼癞己!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起梭伐,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤痹雅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后糊识,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绩社,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年技掏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铃将。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哑梳,死狀恐怖劲阎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸠真,我是刑警寧澤悯仙,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站吠卷,受9級(jí)特大地震影響锡垄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜祭隔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一货岭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦千贯、人聲如沸屯仗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)魁袜。三九已至,卻和暖如春敦第,著一層夾襖步出監(jiān)牢的瞬間峰弹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工芜果, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鞠呈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓师幕,卻偏偏與公主長(zhǎng)得像粟按,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子霹粥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

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