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

Unittest核心工作原理

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

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

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

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

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

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

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

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

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

整個(gè)流程如下:

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

通過命令或者unittest.main()執(zhí)行時(shí),main會(huì)調(diào)用TextTestRunner中的run來執(zhí)行,或者直接通過TextTestRunner來執(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:測試用例加載器其包括多個(gè)加載測試用例的方法。返回一個(gè)測試套件

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

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

loadTestsFromName(self,name,module=None)

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

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

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

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

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

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


總結(jié)如下:

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

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

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

4.verbosity參數(shù)可以控制執(zhí)行結(jié)果的輸出,0是簡單報(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)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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