一 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é)巫玻。