Unittest核心工作原理
最核心的四個概念:test case ,test suite,test runner,test fixture
一個TestCase實例就是一個測試用例
測試用例:指一個完成的測試流程,包括測試前環境搭建(setup),執行測試代碼(run),測試后環境還原(tearDown)。
一個測試用例是一個完整的測試單元,執行這個單元,驗證某個問題
多個測試用例集合在一起就是TestSuite,并且TestSuite可以嵌套TestSuite
TestLoader用來加載TestCase到TestSuite中,loadTestsFrom_()方法,是從各個地方查找TestCase,創建它們的實例,然后add到TestSuite中,再返回一個TestSuite實例
TextTestRunner用來執行測試用例,其中run(test)會執行TestSuite/TestCase中的run(result)方法。測試結果保存到TextTestResult實例中,包括運行了多少測試用例,成功和失敗各有多少等信息
對一個測試用例環境的搭建和銷毀是一個fixture
一個class繼承了unittest.TestCase,就是一個測試用例,如果有很多以test開頭的方法,每個方法在load的時候便會生成一個TestCase實例,如:一個class中有四個test_xxx方法,最后在load到suite中也會有四個測試用例
整個流程如下:
寫好TestCase,然后由Testloader加載TestCase到TestSuite,然后由TextTestRunner來運行TestSuite,運行的結果保存在TextTestResult中
通過命令或者unittest.main()執行時,main會調用TextTestRunner中的run來執行,或者直接通過TextTestRunner來執行用例
說明:在runner執行時,默認將結果輸出到控制臺,可以設置輸出到文件中,然后在文件中查看;另外HTMLTestRunner也同樣是執行用的,它可以將結果輸出到html中,它跟TextTestRunner是一樣的,但是它生成的報告更清晰好看
注意:1.運行時不要把文件放在中文目錄下 2.編碼縮進格式要注意否則會有錯誤,該縮進的要縮進,該頂格的要頂格寫
關鍵字解釋
TestLoader:測試用例加載器,其包括多個加載測試用例的方法。返回一個測試套件
loadTestsFromModule(self,module)--根據給定的模塊實例來獲取測試用例套件
loadTestsFromTestCase(self,testCaseClass)--根據給定的測試類,獲取其中的所有測試方法,并返回一個測試套件
loadTestsFromName(self,name,module=None)
--根據給定的字符串來獲取測試用例套件,字符串可以是模塊名,測試類名,測試類中的測試方法名,或者一個可調用的是實例對象
這個實例對象返回一個測試用例或一個測試套件
loadTestsFromNames(self,names,module=None) --和上面功能相同,只不過接受的是字符串列表
setUp()和tearDown()兩個方法(其實是重寫了TestCase的這兩個方法),這兩個方法在每個測試方法執行前以及執行后執行一次,setUp用來為測試準備環境,tearDown用來清理環境,已備之后的測試。
setUpClass()與tearDownClass():如果想要在所有case執行之前準備一次環境,并在所有case執行結束之后再清理環境,我們可以用setUpClass()與tearDownClass():
關鍵字的關系圖
總結如下:
1.unittest是Python自帶的單元測試框架,我們可以用其來作為我們自動化測試框架的用例組織執行框架。
2.unittest的流程:寫好TestCase,然后由TestLoader加載TestCase到TestSuite,然后由TextTestRunner來運行TestSuite,運行的結果保存在TextTestResult中,我們通過命令行或者unittest.main()執行時,main會調用TextTestRunner中的run來執行,或者我們可以直接通過TextTestRunner來執行用例。
3.一個class繼承unittest.TestCase即是一個TestCase,其中以test開頭的方法在load時被加載為一個真正的TestCase。
4.verbosity參數可以控制執行結果的輸出,0是簡單報告、1是一般報告、2是詳細報告。
5.可以通過addTest和addTests向suite中添加case或suite,可以用TestLoader的loadTestsFrom__()方法。
6.用setUp()、tearDown()、setUpClass()以及tearDownClass()可以在用例執行前布置環境,以及在用例執行后清理環境
7.我們可以通過skip,skipIf,skipUnless裝飾器跳過某個case,或者用TestCase.skipTest方法。
8.參數中加stream,可以將報告輸出到文件:可以用TextTestRunner輸出txt報告,以及可以用HTMLTestRunner輸出html報告。