一、Pyhon工作原理—— 核心概念:test case, testsuite, TestLoder,TextTestRunner,TextTestResult, test fixture
TestCase(測試用例): 所有測試用例的基類,它是軟件 測試中最基本的組成單元。
一個test case就是一個測試用例,是一個完整的測試流程,包括測試前環境的搭建setUp,執行測試代碼(run),以及測試后環境的還原(tearDown)。測試用例是一個完整的測試單元,可以對某一問題進行驗證。
TestSuite(測試套件):多個測試用例test case集合就是TestSuite,TestSuite可以嵌套TestSuite
TestLoder:是用來加載 TestCase到TestSuite中,其中有幾個loadTestsFrom_()方法,就是從各個地方尋找TestCase,創建他們的實例,然后add到TestSuite中,再返回一個TestSuite實例
TextTestRunner:是來執行測試用例的,其中的run(test)會執行TestSuite/TestCase中的run(result)方法。
TextTestResult:測試結果會保存到TextTestResult實例中,包括運行了多少用例,成功與失敗多少等信息
TestFixture:又叫測試腳手,測試代碼的運行環境,指測試准備前和執行后要做的工作,包括setUp和tearDown方法
二、測試流程:
1. 寫好TestCase:一個class繼承unittest.TestCase,就是一個測試測試用例,其中有多個以test開頭的方法,那么 每一個這樣的,在load的時候會生成一個TestCase實例。如果一個class中有四個test開頭的方法,最后load到suite中時則有四個測試用例
2. 由TestLoder加載TestCase到TestSuite
3.然后由TextTestRunner來運行TestSuite,運行的結果保存在TextTestResult中。
說明:a:通過命令行或者unittest.main()執行時,main會調用TextTestRunner中的run來執行,或者可以直接通過TextTestRunner來執行用例
b:Runner執行時,默認將結果輸出到控制台,我們可以設置其輸出到文件,在文件中查看 結果,也可以通過HTMLTestRunner將結果輸出到HTML)
三、unittest實例:
1.准備待測方法:
mathfunc.py
2. 為以上方法寫測試:
這就是一個簡單的測試,有幾點需要說明的:
a:在第一行給出了每一個用例執行的結果的標識,成功是 .
,失敗是 F
,出錯是 E
,跳過是 S
。從上面也可以看出,測試的執行跟方法的順序沒有關系,test_divide寫在了第4個,但是卻是第2個執行的。
b:每個測試方法均以 test
開頭,否則是不被unittest識別的。
c:在unittest.main()中加 verbosity
參數可以控制輸出的錯誤報告的詳細程度,默認是 1
,如果設為 0
,則不輸出每一用例的執行結果,即沒有上面的結果中的第1行;如果設為 2
,則輸出詳細的執行結果
3.組織TestSuite
a:確定測試用例的順序,哪個先執行哪個后執行?
b:如果測試文件有多個,怎么進行組織?
TestLoder加載TestCase幾種方法
4. 生成結果到文件:
5. test fixture——setUp(),tearDown()方法
setUp()
和 tearDown()
兩個方法(其實是重寫了TestCase的這兩個方法),這兩個方法在每個測試方法執行前以及執行后執行一次,setUp用來為測試准備環境,tearDown用來清理環境,已備之后的測試。
class TestMathFunc(unittest.TestCase):
# setUp 和 tearDown方法會在每個測試方法執行前及執行后執行一次,setUp用來為測試准備環境,tearDown用來清理環境已備之后的測試
def setUp(self):
print 'do something before test.prepare environment'
def tearDown(self):
print 'do something after test.clean up'
如果想要在所有case執行之前准備一次環境,並在所有case執行結束之后再清理環境,我們可以用setUpClass()
與tearDownClass()
:
class TestMathFuncTwo(unittest.TestCase):
#如果想要在所有case執行之前准備一次環境,並在所有case執行結束后再清理環境,我們可以用setUpClass()與tearDownClass(),注意:@classmethod必須加,否則報錯
@classmethod
def setUpClass(cls):
print 'This setUpClass() method only called once'
@classmethod
def tearDownClass(cls):
print 'This tearDownClass() method only called once too'
6. 跳過某個case
7. 用HTMLTestRunner輸出HTML報告
HTMLTestRunner是一個第三方的unittest HTML報告庫,首先我們下載HTMLTestRunner.py,並放到當前目錄下,或者你的’C:\Python27\Lib’下,就可以導入運行了
ps:本文有部分內容摘自網絡,鏈接:http://blog.csdn.net/huilan_same/article/details/52944782