一、unittest簡單介紹
1、import unittest
2、定義一個繼承自unittesu.TestCase的測試用例類
3、定義SetUp和TearDown,在每個測試用例前後做一些輔助工作
4、定義測試用例,名字以test開頭
5、一個測試用例應只測試一方面,測試目的和測試內容應很明確,主要調用assertEqual、assertRaises等斷言方法判斷程序執行結果和預期值是否相符
6、調用unittest.main()啓動測試
7、如果測試沒有通過,會輸出響應的錯誤提示,如果測試全部通過則不顯示任何東西,也可添加-V參數顯示詳細信息
二、unittest的基本使用
import unittest #導入unittest模塊
class testCase(unittest.TestCase): #創建單元測試類,繼承unittest.TestCase
#setUp
'''
1、用於每個測試用例執行前的初始化工作
2、所有類中方法的入參爲self,定義實例變量也要self變量
'''
def setUp(self):
print("case執行前")
#tearDown
'''
每個測試用例執行後的都會執行此方法
'''
def tearDown(self):
print("case執行後")
#setUpClass
'''
1、每個單元測試類運行前調用該方法,只會執行一次
2、屬於類方法,需要加上裝飾器@classmethod
3、默認入參爲cls,指的就是‘類對象’本身,其實和self沒什麼區別,用法一致
'''
@classmethod
def setUpClass(cls):
print("對象執行前")
#tearDownClass
'''
1、每個單元測試類運行後調用該方法,只執行一次
2、屬於類方法,需要加上裝飾器@calssmethod
'''
@classmethod
def tearDownClass(cls):
print("對象執行後")
def test_1(self):
print("test1")
def test_2(self):
print("test2")
if __name__ == '__main__':
#unittest.main()
'''
1、運行單元測試
2、該命令會搜索當前module下所有以test開頭的測試用例,並運行他們
3、執行順序是按照case的命令
'''
unittest.main()
執行後的效果
三、unittest模塊的常用方法
1、assertEqual(a,b) a == b
2、assertNotEqual(a,b) a != b
3、assertTrue(x) bool(x) is True
4、assertFalse(x) bool(x) is False
5、assertIs(a,b) a is b
6、assertIsNot(a,b) a is not b
7、assertIsNone(x) x is None
8、assertIsNotNone(x) x is not None
9、assertIn(a,b) a in b
10、assertNotIn(a,b) a not in b
11、assertIsInstance(a,b) isinstance(a,b)
12、assertNotIsInstance(a,b) not isinstance(a,b)
四、unittest測試用例跳過執行
import unittest
import sys
class testCase(unittest.TestCase):
#直接跳過
'''跳過測試用例,reason爲測試被跳過的原因'''
@unittest.skip("直接跳過")
def test_skip(self):
self.fail("不會被執行")
#滿足condition則跳過
'''當condition爲真時,跳過測試用例'''
@unittest.skipIf(1 < 2,"滿足condition則跳過")
def test_skipIf(self):
print("skip If")
#不滿足condition則跳過
'''跳過測試用例,除非condition爲真'''
@unittest.skipUnless(sys.platform.startswith("win"), "需要window平臺纔不會跳過")
def test_skipUnless(self):
print("skip Unless")
#預期該測試用例會測試失敗
'''把測試用例標記爲預計失敗;如果測試不通過,會被認爲測試城管;如果測試通過了,則被認爲測測試失敗'''
@unittest.expectedFailure
def test_fail(self):
self.assertEqual(1,0,"broken")
#方法體內跳出不執行case
def test_maybe_skipped(self):
if True:
'''在方法體內滿足某些條件下才跳過執行該測試用例'''
self.skipTest("調用unittest的skipTest,在方法體內滿足某些條件則跳過該case")
pass
if __name__ == '__main__':
unittest.main()