【原創(chuàng)】Python實戰(zhàn)之unittest使用詳解

一 unittest是什么乍恐?

unittest是python內(nèi)置的單元測試框架默蚌,具備編寫用例辆琅、組織用例、執(zhí)行用例这刷、輸出報告等自動化框架的條件婉烟。使用unittest前需要了解該框架的五個概念:

即test?case,test?suite,testLoader,test?runner,test?fixture暇屋。

test?case??:一個完整的測試單元似袁,執(zhí)行該測試單元可以完成對某一個問題的驗證,完整體現(xiàn)在:測試前環(huán)境準備(setUp)咐刨,執(zhí)行測試代碼(run)昙衅,及測試后環(huán)境還原(tearDown);

test?suite??:多個測試用例的集合定鸟,測試套件或測試計劃而涉;

testLoader??:加載TestCase到TestSuite中的,其中l(wèi)oadTestsFrom__()方法用于尋找TestCase联予,并創(chuàng)建它們的實例啼县,然后添加到TestSuite中,返回TestSuite實例沸久;

test?runner?:執(zhí)行測試用例谭羔,并將測試結(jié)果保存到TextTestResult實例中,包括運行了多少測試用例麦向, 成功了多少,失敗了多少等信息客叉;

test?fixture:一個測試用例的初始化準備及環(huán)境還原诵竭,主要是setUp()?和?setDown()方法;

二 unitest的工作原理

通過unittest類調(diào)用分析兼搏,可將框架的工作流程概況如下:

編寫TestCase卵慰,由TestLoader加載TestCase到TestSuite,然后由TextTestRunner來運行TestSuite佛呻,最后將運行的結(jié)果保存在TextTestResult中裳朋。

三 unittest實戰(zhàn)舉例

了解了unittest框架的五大概念和工作流程后,接下來舉例如何使用該框架對模塊進行單元測試吓著。

3.1 待測模塊myfunc

myfunc包含三個函數(shù):isprime(),add(),divide(),如下:

3.2 unitest編寫測試用例

使用unittest對myfunc進行單元測試鲤嫡,首先需要導入unitest框架和待測模塊myfunc,定義的測試用例方法類需要繼承unittest.TestCase,且測試用例方法是以test開頭作為標識绑莺,用例的執(zhí)行結(jié)果以assetxxx斷言結(jié)果決定暖眼,如果斷言返回為false,將拋出assetError異常纺裁。測試用例代碼如下:

一些常用的斷言方法如下诫肠,更多斷言方法請查看unittest自帶文檔:

從上面的設(shè)計的測試用例執(zhí)行結(jié)果及對自動化測試的要求司澎,需要考慮以下4個問題,及給出unitest框架中的解決方法栋豫。

3.3 框架如何解決自動化需求的4個問題

3.3.1 問題1: 如何控制用例執(zhí)行順序

在unittest中挤安,用例是以test開頭的方法定義的,默認執(zhí)行順序是根據(jù)用例名稱升序進行丧鸯,如上面的用例蛤铜,實際執(zhí)行順序為:test_add-->test_divide-->test_is_prime,而不是用例定義的先后順序。在unittest中解決用例執(zhí)行順序的問題是使用TestSuite骡送,代碼如下:

3.3.2 問題2:如何讓多個用例共用setup昂羡、teardown

unittest的setup、teardown會在每個用例執(zhí)行前后執(zhí)行一次摔踱,如上面測試用例類中有3個測試用例虐先,那么每個用例執(zhí)行前會執(zhí)行setup,執(zhí)行后會執(zhí)行teardown派敷,即setup蛹批、teardown總共會調(diào)用三次,但考慮實際自動化測試場景篮愉,多個用例只需執(zhí)行一次setup腐芍,全部用例執(zhí)行完成后,執(zhí)行一次teardown试躏,針對該種場景猪勇,unittest的處理方法是使用setupclass、teardownclass颠蕴,注意@classmethod的使用泣刹,如下:

3.3.3 問題3:如何跳過用例

在自動化測試中,經(jīng)常會遇到挑選用例的情況犀被,在unittest中的解決方法是使用skip裝飾器椅您,其中skip裝飾器主要有3種:unittest.skip(reason)、unittest.skipIf(condition,reason)寡键、unittest.skipUnless(condition,reason)掀泳,即在滿足condition條件下跳過該用例,reason用于描述跳過的原因西轩,實例代碼如下:

3.3.4? 問題4:如何生成html格式的測試報告

Unittest中默認生成的報告格式為txt员舵,如果想生成html格式的報告,可以使用HtmlTestRunner模塊藕畔,安裝后導入該模塊固灵,使用HTMLTestRunner代替默認的TextTestRunner()執(zhí)行測試用例即可。實例代碼如下:

其他資源:

關(guān)于python unittest單元框架的視頻講解劫流,請參看:http://i.youku.com/weiworld521第 23 節(jié)巫玻。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丛忆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子仍秤,更是在濱河造成了極大的恐慌熄诡,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诗力,死亡現(xiàn)場離奇詭異凰浮,居然都是意外死亡,警方通過查閱死者的電腦和手機苇本,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門袜茧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瓣窄,你說我怎么就攤上這事笛厦。” “怎么了俺夕?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵裳凸,是天一觀的道長。 經(jīng)常有香客問我劝贸,道長姨谷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任映九,我火速辦了婚禮梦湘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘件甥。我一直安慰自己捌议,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布嚼蚀。 她就那樣靜靜地躺著,像睡著了一般管挟。 火紅的嫁衣襯著肌膚如雪轿曙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天僻孝,我揣著相機與錄音导帝,去河邊找鬼。 笑死穿铆,一個胖子當著我的面吹牛您单,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荞雏,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼虐秦,長吁一口氣:“原來是場噩夢啊……” “哼平酿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起悦陋,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤蜈彼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后俺驶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幸逆,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年暮现,在試婚紗的時候發(fā)現(xiàn)自己被綠了还绘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡栖袋,死狀恐怖拍顷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情栋荸,我是刑警寧澤菇怀,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站晌块,受9級特大地震影響爱沟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匆背,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一呼伸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钝尸,春花似錦括享、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至猪叙,卻和暖如春娇斩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背穴翩。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工犬第, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芒帕。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓歉嗓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親背蟆。 傳聞我的和親對象是個殘疾皇子鉴分,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

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