【Python】unittest-3

來源:互聯網
上載者:User

標籤:runner   print   function   seq   測試方法   模組名   指令碼   load   win   

一、@unittest.skip("skipping this case") # 無條件忽略該測試方法

二、@unittest.skipIf(a > 5, "condition is not satisfied!") #如果變數a > 5,則忽略該測試方法

三、@unittest.skipUnless(sys.platform.startswith("linux"), "requires Linux") # 除非執行測試案例的平台是Linux平台,否則忽略該測試方法  win32是windows

四、測試集

1、  unittest自身包括的方法有:

[‘FunctionTestCase‘, ‘TestCase‘, ‘TestLoader‘, ‘TestProgram‘, ‘TestResult‘,
 ‘TestSuite‘,‘TextTestRunner‘, ‘_CmpToKey‘, ‘_TextTestResult‘, ‘_WritelnDecorator‘,
 ‘defaultTestLoader‘,‘findTestCases‘, ‘getTestCaseNames‘, ‘main‘, ‘makeSuite‘]

2、 每個方法的含義

 ‘FunctionTestCase‘:函數測試案例,即給一個函數作為參數,返回一個testcase執行個體,選擇性參數有set-up,tear-down方法
 ‘TestCase‘:所有測試案例的基本類,給一個測試方法的名字,返回一個測試案例執行個體
 ‘TestLoader‘:測試案例載入器,其包括多個載入測試用例的方法。返回一個測試套件
 loadTestsFromModule(self, module)--根據給定的模組執行個體來擷取測試案例套件
 loadTestsFromName(self, name, module=None)
 --根據給定的字串來擷取測試案例套件,字串可以是模組名,測試類別名,測試類別中的測試方法名,或者一個可調用的是執行個體對象
 這個執行個體對象返回一個測試案例或一個測試套件
 loadTestsFromNames(self, names, module=None) --和上面功能相同,只不過接受的是字串列表
 loadTestsFromTestCase(self, testCaseClass)--根據給定的測試類別,擷取其中的所有測試方法,並返回一個測試套件
‘TestProgram‘:命令列進行單元測試的調用方法,作用是執行一個測試案例。其實unittest.main()方法執行的就是這個命令,
而這個類執行個體時預設載入當前執行的作為測試對象,
原型為 __init__(self, module=‘__main__‘, defaultTest=None, argv=None, testRunner=xx, testLoader=xx)
其中module=‘__main__‘就是預設載入自身
‘TestResult‘:測試案例的結果儲存執行個體,通常有測試架構調用
 ‘TestSuite‘:組織測試案例的執行個體,支援測試案例的添加和刪除,最終將傳遞給testRunner進行測試執行
 ‘TextTestRunner‘:進行測試案例執行的執行個體,其中Text的意思是以文本形式顯示測試結果。顯示測試名稱,即完成的測試結果,其過同執行單元測試指令碼時添加-v參數
 ‘defaultTestLoader‘:其實就是TestLoader
 ‘findTestCases‘, ‘getTestCaseNames‘:這個2個就不用解釋了
 ‘main‘: 其實就是TestProgram
 ‘makeSuite‘:通常是由單元測試架構調用的,用於生產testsuite對象的執行個體

五、單元測試總結

至此,我們知道了。其實整個單元測試架構的邏輯出來了。分三步走:第一步testloader根據傳入的參數獲得相應的測試案例,即對應具體的測試方法, 然後makesuite在把所有的測試案例組裝成testsuite,最後把testsiute傳給testrunner進行執行。 而我們通常執行的unittest.main(),其實就是unittest.testprogram方法,其執行的功能就是上面分析的三步,在第一步中其傳入的參數是自身的模組__main__; 在第二步中把自身模組中的所有測試類別中中的測試方法提取出來,並產生測試套件;最後再把測試套件傳遞給testrunner進行具體的測試。 最後給出一個完整的單元測試組織代碼,把該代碼放到單元測試用例檔案的同一個目錄後執行該指令碼,即可執行所有的測試案例檔案。

六、測試集參數配置

1、  verbosity 參數可以控制輸出的錯誤報表的詳細程度,預設是 1,如果設為 0,則不輸出每一用例的執行結果,即沒有上面的結果中的第1行;如果設為 2,則輸出詳細的執行結果

2、  參數中加stream,可以將報告輸出到檔案:可以用TextTestRunner輸出txt報告,以及可以用HTMLTestRunner輸出html報告。

 #練習:import randomimport unittestimport sys class TestSequenceFunctions(unittest.TestCase):    a = 1     def setUp(self):        self.seq = list(range(10))     @unittest.skip("skipping") # 無條件忽略該測試方法    def test_shuffle(self):        random.shuffle(self.seq)        self.seq.sort()        self.assertEqual(self.seq, list(range(10)))        self.assertRaises(TypeError, random.shuffle, (1, 2, 3))     # 如果變數a > 5,則忽略該測試方法    @unittest.skipIf(a > 5, "condition is not satisfied!")    def test_choice(self):        element = random.choice(self.seq)        self.assertTrue(element in self.seq)     # 除非執行測試案例的平台是Linux平台,否則忽略該測試方法  win32是windows    @unittest.skipUnless(sys.platform.startswith("linux"), "requires Linux")    def test_sample(self):        #期望拋出什麼樣的error        with self.assertRaises(ValueError):            random.sample(self.seq, 20)        for element in random.sample(self.seq, 5):            self.assertTrue(element in self.seq)  if __name__ == ‘__main__‘:    # unittest.main()    #使用測試集的方法執行    #裝載測試案例(該句話等價於suite = [TestSequenceFunctions("test_shuffle"),TestSequenceFunctions ("test_choice"),TestSequenceFunctions("test_sample")])    suite = unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions)     #使用測試套件並打包測試案例    suite = unittest.TestSuite(suite)       #儲存unittest的測試輸入日誌到檔案    log_name="e:\\test4\\log.txt"    #verbosity=2是指測試結果的輸出的詳細程度    #stream = f是指將結果輸出到檔案f    with open(log_name,"w+") as f:        result=unittest.TextTestRunner(stream = f,verbosity = 2).run(suite)    #unittest.TextTestRunner(verbosity = 2).run(suite)   #產生測試報告    print"testsRun:%s" %result.testsRun    print"failures:%s" %len(result.failures)    print"errors:%s" %len(result.errors)    print"skipped:%s" %len(result.skipped)

【Python】unittest-3

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.