Python unittest框架操作實例解析
操作步驟
- 導(dǎo)入框架,import unitest
- 測試類必須繼承類:.class 類名(unittest.TestCase):
- 在類中所有定義testXXX(區(qū)分大小寫)開頭的函數(shù)都是可執(zhí)行的測試用例
- 鉤子方法setUp(每個測試用例前執(zhí)行)、tearDown(每個測試用例后執(zhí)行)
- 執(zhí)行用例unitest.main()
- 斷言
常用斷言
| 方法 | 等價于 | 描述 |
|---|---|---|
| assertEqual(a,b) | a==b | 值是否相等 |
| aassertNotEqual(a,b) | a!=b | 值是否不相等 |
| aasserIs(a,b) | a is b | 值是否相同 |
| aassertIsNot(a,b) | a is not b | 值是否不同 |
| assertIn(a,b) | a in b | a是否包含b |
| assertNotIn(a,b) | a not in b | a是否不包含b |
| ssertTrue(a) | bool(a) is true | 是否為真 |
| assertFalse(a) | bool(a)is false | 是否為假 |
| assertIsNone(a) | a is None | 是否為空 |
| assertIsNotNone(a) | a is None | 是否不為空 |
| assertIsInstance(a,b) | Instance(a,b) | a與b的數(shù)據(jù)類型一樣 |
| assertNotIsInstance(a) | not Instance(a,b) | a與b的數(shù)據(jù)類型不一樣 |
舉例說明
#!/usr/bin/python3
# encoding:utf-8
'''
Created on 2019-10-12
@author: EDZ
'''
#!/usr/bin/python3
# encoding:utf-8
import unittest
#繼承unittest基類
class un_test(unittest.TestCase):
def setUp(self):
print("鉤子方法,每個用例執(zhí)行前執(zhí)行")
def tearDown(self):
print("鉤子方法,每個用例執(zhí)行后執(zhí)行")
#必須testXXX命名函數(shù)才會被執(zhí)行
def test_Equal(self):
print('1.assertEqual值相同')
a='中國'
b='中國'
self.assertEqual(a,b)
def test_Is(self):
a='中國'
b='中國'
print('2.assertIs值相同')
self.assertIs(a,b)
def test_Instance(self):
a = 'aaa'
b = [1,2,3,4]
print(type(a),type(b),"3.數(shù)據(jù)類型不相等")
self.assertNotIsInstance(type(a),type(b))
def cf(self,a,b):
return a/b
def test_rasi(self):
print('4.1/0拋出異常')
self.assertRaises(ZeroDivisionError,self.cf,1,0)
if __name__=="__main__":
#unittest執(zhí)行本類全部testXXX命名的測試用例
unittest.main()
#-----------下面為特殊加載方式-------------------
'''
#通過文件模塊加載(loadTestsFromModule)
suite = unittest.TestSuite()
loader = unittest.TestLoader()#用例加載器
#文件模塊名,例如有文件moku.py 第一步:import moku loader.loadTestsFromModule(文件名)
suite.addTest(loader.loadTestsFromModule(moku))
#通過測試類來加載(loadTestsFromTestCase)
suite = unittest.TestSuite()
loader = unittest.TestLoader()#用例加載器
#例如有文件moku.py 其中有類名classT 第一步導(dǎo)入類:from moku import classT (loader.loadTestsFromTestCase(classT))#類名
suite.addTest(loader.loadTestsFromTestCase(un_test))#如果類在本文件模塊內(nèi)直接加載。
#一個一個添加
suite = unittest.TestSuite()
suite.addTest(un_test('test_Equal'))#(類名('函數(shù)'))
#測試用例數(shù)較多時,采用defaultTestLoader.discover()方式
suite = unittest.defaultTestLoader.discover('./',pattern='y*.py', top_level_dir=None)
#1、因為unittest中規(guī)定,測試用例必須test開頭,所以discover中的pattern格式才是test*.py
#2、start_dir是存放測試用例的目錄
#pattern='test*.py':表示用例文件名的匹配原則。此處匹配以“test”開頭的.py 類型的文件,* 表示任意多個字符
#top_level_dir= None 測試模塊的頂層目錄,如果沒有頂層目錄,默認(rèn)為None
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
這里的verbosity是一個選項,表示測試結(jié)果的信息復(fù)雜度,有三個值
0 (靜默模式): 你只能獲得總的測試用例數(shù)和總的結(jié)果 比如 總共100個 失敗20 成功80
1 (默認(rèn)模式): 非常類似靜默模式 只是在每個成功的用例前面有個“.” 每個失敗的用例前面有個 “F”
2 (詳細(xì)模式):測試結(jié)果會顯示每個測試用例的所有相關(guān)的信息
并且 你在命令行里加入不同的參數(shù)可以起到一樣的效果
加入 --quiet 參數(shù) 等效于 verbosity=0
加入--verbose參數(shù)等效于 verbosity=2
什么都不加就是 verbosity=1</pre>
'''
運行結(jié)果
鉤子方法,每個用例執(zhí)行前執(zhí)行
1.assertEqual值相同
鉤子方法,每個用例執(zhí)行后執(zhí)行
鉤子方法,每個用例執(zhí)行前執(zhí)行
<class 'str'> <class 'list'> 3.數(shù)據(jù)類型不相等
鉤子方法,每個用例執(zhí)行后執(zhí)行
鉤子方法,每個用例執(zhí)行前執(zhí)行
2.assertIs值相同
鉤子方法,每個用例執(zhí)行后執(zhí)行
鉤子方法,每個用例執(zhí)行前執(zhí)行
4.1/0拋出異常
鉤子方法,每個用例執(zhí)行后執(zhí)行
Ran 4 tests in 0.001s
OK
說明:鉤子方法每個用例都執(zhí)行,Ran 4 表示成功執(zhí)行4個testXXX的測試用例
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python3實現(xiàn)發(fā)送QQ郵件功能(html)
這篇文章主要為大家詳細(xì)介紹了Python3實現(xiàn)發(fā)送QQ郵件功能,html格式的qq郵件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12
使用Python實現(xiàn)炫酷的數(shù)據(jù)動態(tài)圖大全
數(shù)據(jù)可視化是通過圖形、圖表、地圖等可視元素將數(shù)據(jù)呈現(xiàn)出來,以便更容易理解、分析和解釋,它是將抽象的數(shù)據(jù)轉(zhuǎn)化為直觀形象的過程,本文給大家介紹了使用Python實現(xiàn)炫酷的數(shù)據(jù)動態(tài)圖大全,需要的朋友可以參考下2024-06-06

