Python Unittest原理及基本使用方法
基本使用步驟:
1、import unittest
2、新建一個(gè)Class繼承unittest.TestCase
3、定義一個(gè)以test開頭的函數(shù)作為測試用例【必須以test開頭】
4、執(zhí)行測試用例前都會(huì)先調(diào)用Setup函數(shù)【每個(gè)測試用例調(diào)用一次】或者setupClass函數(shù)【所有測試用例僅調(diào)用一次】
5、執(zhí)行完測試用例后都會(huì)調(diào)用tearDown函數(shù)【多次】和tearDownClass函數(shù)【僅一次】
PS:
1、不能重寫init()
2、函數(shù)必須以test開頭才能作為測試用例
3、setupClass()和tearDownClass()必須用@classmethod修飾
# -*- encoding=utf-8 -*- import unittest class Demo1(unittest.TestCase): def setUp(self): print '調(diào)用 setup 函數(shù)' @classmethod def setUpClass(cls): print '調(diào)用 setupClass 函數(shù)' def tearDown(self): print '調(diào)用 tearDown 函數(shù)' @classmethod def tearDownClass(cls): print '調(diào)用 tearDownClass 函數(shù)' @staticmethod def test_add(): print '3 + 5 = {}'.format(3 + 5) @staticmethod def test_sub(): print '3 - 5 = {}'.format(3 - 5) if __name__ == '__main__': unittest.main()
運(yùn)行結(jié)果
調(diào)用 setupClass 函數(shù)
調(diào)用 setup 函數(shù)
3 + 5 = 8
調(diào)用 tearDown 函數(shù)
調(diào)用 setup 函數(shù)
3 - 5 = -2
調(diào)用 tearDown 函數(shù)
調(diào)用 tearDownClass 函數(shù)
Ran 2 tests in 0.012s
OK
TestSuite【測試組】添加測試用例進(jìn)行測試
# -*- encoding=utf-8 -*- class Class1(object): def __init__(self): print '調(diào)用 Class1 初始化函數(shù)' self.name = '未定義姓名' self.age = '未定義年齡' def set_name(self, name): self.name = name def set_age(self, age): self.age = age def print_name(self): print 'Class1 的姓名是:{}'.format(self.name) def print_age(self): print 'Class1 的年齡是:{}'.format(self.age) if __name__ == '__main__': pass # -*- encoding=utf-8 -*- import unittest from Class1 import Class1 class CallClass1(unittest.TestCase): def setUp(self): self.class1 = Class1() pass def tearDown(self): self.class1 = None pass def test_set_name(self): self.class1.set_name('設(shè)置了名字') self.class1.print_name() def test_print_name(self): self.class1.print_name() if __name__ == '__main__': unittest.main() # -*- encoding=utf-8 -*- import unittest from Test_Demo2 import CallClass1 if __name__ == '__main__': testSuite = unittest.TestSuite() testSuite.addTest(CallClass1('test_set_name')) testSuite.addTests( [CallClass1('test_set_name'), CallClass1('test_print_name')]) textTestRunner = unittest.TextTestRunner() textTestRunner.run(testSuite)
運(yùn)行結(jié)果
調(diào)用 Class1 初始化函數(shù)
Class1 的姓名是:設(shè)置了名字
調(diào)用 Class1 初始化函數(shù)
Class1 的姓名是:設(shè)置了名字
調(diào)用 Class1 初始化函數(shù)
Class1 的姓名是:未定義姓名
...
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
Process finished with exit code 0
記錄測試報(bào)告到txt文件
# -*- encoding=utf-8 -*- import unittest from Test_Demo2 import CallClass1 if __name__ == '__main__': testSuite = unittest.TestSuite() testSuite.addTest(CallClass1('test_set_name')) testSuite.addTests( [CallClass1('test_set_name'), CallClass1('test_print_name')]) # textTestRunner = unittest.TextTestRunner() # textTestRunner.run(testSuite) # 將測試結(jié)果輸出到測試報(bào)告中 with open('UnittestTextReport.txt', 'w') as f: runner = unittest.TextTestRunner(stream=f, verbosity=2) runner.run(testSuite)
記錄測試報(bào)告到html文件
# 將測試結(jié)果輸出到測試報(bào)告html中 with open('HTMLReport.html', 'w') as f: runner = HTMLTestRunner(stream=f, title='MathFunc Test Report', description='generated by HTMLTestRunner.', verbosity=2 ) runner.run(suite)
斷言
當(dāng)斷言為真時(shí),會(huì)執(zhí)行斷言之后的代碼如(在斷言之后打印成功提示信息)
若斷言為假,則之后的代碼不會(huì)被執(zhí)行,打應(yīng)錯(cuò)誤信息,之后提示信息不會(huì)被執(zhí)行;unittest中提示F,失敗,若捕獲到異常,則為E,代表錯(cuò)誤;
補(bǔ)充:若斷言為假,則當(dāng)前函數(shù)def,停止運(yùn)行,但會(huì)運(yùn)行之后的def函數(shù)
重點(diǎn):try語句塊中不要使用assert一起使用,assert斷言為假時(shí),會(huì)拋出異常,測試用例為失敗,如果放到try中,則會(huì)捕獲到異常,測試用例永遠(yuǎn)標(biāo)記為通過
斷言結(jié)果:
. 表示通過 或者 pass
F False, 表示斷言沒有通過
E Error, 表示程序內(nèi)部發(fā)生了錯(cuò)誤。
查找當(dāng)前目錄下所有的測試用例【默認(rèn)以test開頭的py文件,可以自己配置】
# -*- encoding=utf-8 -*- import unittest import os if __name__ == '__main__': loader = unittest.defaultTestLoader.discover(os.getcwd()) # tests = unittest.defaultTestLoader.discover( # start_dir='.', # => 指定查找的目錄 # pattern='test*.py' # => 指定查找規(guī)則 # ) runner = unittest.TextTestRunner() runner.run(loader)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Pytorch 中net.train 和 net.eval的使用說明
這篇文章主要介紹了Pytorch 中net.train 和 net.eval的使用說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05Python實(shí)現(xiàn)的一個(gè)自動(dòng)售飲料程序代碼分享
這篇文章主要介紹了Python實(shí)現(xiàn)的一個(gè)自動(dòng)售飲料程序代碼分享,就是用python實(shí)現(xiàn)的生活中一種投幣式自動(dòng)售飲料機(jī)的內(nèi)部程序判斷代碼,需要的朋友可以參考下2014-08-08Python服務(wù)器創(chuàng)建虛擬環(huán)境跑代碼
本文主要介紹了Python服務(wù)器創(chuàng)建虛擬環(huán)境跑代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07解決pycharm 遠(yuǎn)程調(diào)試 上傳 helpers 卡住的問題
今天小編就為大家分享一篇解決pycharm 遠(yuǎn)程調(diào)試 上傳 helpers 卡住的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06Python基于回溯法子集樹模板實(shí)現(xiàn)8皇后問題
這篇文章主要介紹了Python基于回溯法子集樹模板實(shí)現(xiàn)8皇后問題,簡單說明了8皇后問題的原理并結(jié)合實(shí)例形式分析了Python回溯法子集樹模板解決8皇后問題的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-09-09Python利用pandas和matplotlib實(shí)現(xiàn)繪制圓環(huán)圖
在可視化的過程中,圓環(huán)圖是一種常用的方式,特別適合于展示各類別占比情況,本文將介紹如何使用 Python中的 pandas 和 matplotlib 庫,來制作一個(gè)店鋪銷量占比的圓環(huán)圖,需要的可以參考下2023-11-11基于MSELoss()與CrossEntropyLoss()的區(qū)別詳解
今天小編就為大家分享一篇基于MSELoss()與CrossEntropyLoss()的區(qū)別詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01