1.unittest簡介
unittest庫包括:TestCase、TestSuite、TestLoder、TextRunner、TextTestResult、TestFixture
TestCase是測試的最小單元模塊。它檢查對特定輸入集合的特定響應。unittest提供給一個基類Testcase,可以使用這個類創建一個新測試testTestCase 。
TestSuite是測試集,測試集是測試用例、測試集或者二者的一個集合。它被用於把測試整合在一起,批量運行測試。
TestLoder是用來加載 TestCase到TestSuite中,其中有幾個loadTestsFrom_()方法,就是從各個地方尋找TestCase,創建他們的實例,然后add到TestSuite中,再返回一個TestSuite實例
TextRunner是運行測試器, 測試運行器是協調測試執行並向用戶提供結果的組件。運行器可以使用圖形界面、文本界面、或返回特定值來指示執行測試的結果。
TextTestResult測試結果會保存到TextTestResult實例中,包括運行了多少用例,成功與失敗多少等信息
TestFixture表示執行一個或者多個測試前的准備工作,確保每個測試之間的獨立性。這可能涉及到創建臨時或者代理數據庫、目錄、服務器情動進程等相關准備工作
2.unittest的使用
# 步驟1、引入單元測試庫 import unittest # 步驟2:定義測試類,繼承TestCase類。 class MyTestClass(unittest.TestCase): # 在測試類當中,所有用例運行之前,執行的前置工作。不管有幾個用例,且只運行一次。 # 有3個用例,在第一個用例運行之前,運行一次。 @classmethod def setUpClass(cls): print("====我是測試類級別的前置工作===整個測試類,只運行1次!在用例執行之前!====") # 在測試類當中,所有用例運行之后,執行的后置工作。不管有幾個用例,且只運行一次。 @classmethod def tearDownClass(cls): print("====我是測試類級別的后置工作===整個測試類,只運行1次!在所有用例執行完成之后!====") # 每一條用例運行之前,前置工作 def setUp(self): print("=====開始運行 一條用例======") # 每一條用例運行之后,后置工作 def tearDown(self): print("=====一條用例 運行結束======") # 其中函數名稱以test_開頭的,是一個測試用例。 def test_upper(self): print("***************************") # 1、測試數據 my_str = "iDo" # 2、步驟 res = my_str.upper() # 3、斷言 == 期望結果與實際結果比對。 self.assertEqual(res, "IDO", " 不是大寫") # 如果期望與實際不符,那么AssertionError def test_upper_is_true(self): print("***************************") # 1、測試數據 my_str = "iDo" # 2、步驟 res = my_str.isupper() # 期望:True 實際的:res self.assertTrue(res) def test_who_bigger(self): print("***************************") # 1、測試數據 a, b = 100, 244 # 期望:小於 self.assertLess(a, b)
3.斷言種類
方法 | 檢查 | 版本 | 注釋 |
assertEqual(a, b) | a ==b | 斷言第一個參數和第二個參數是否相等(==相等)、(!=不相等) |
|
assertNotEqual(a, b) | a !=b | ||
assertTrue(x) | bool(x) is True | 測試表達式是true(或false) |
|
assertFalse(x) | Bool(x) is False | ||
assertIs(a, b) | a is b | 3.1 | 斷言第一個參數和第二個參數是否為同一個對象 |
assertIsNot(a, b) | a is not b | 3.1 | |
assertIsNone(x) | x is None | 3.1 | 斷言表達式是否為None對象 |
assertIsNotNone(x) | x is not None | 3.1 | |
assertIn(a, b) | a in b | 3.1 | 判斷第一個參數是否在第二個參數中,反過來講,第二個參數是否包含第一個參數 |
assertNotIn(a, b) | a not in b | 3.1 | |
assertIsInstance(a, b) | isinstance(a,b) | 3.1 | 判斷a與b的數據類型是否相等 |
assertNotIsInstance(a, b) | not isinstance(a,b) | 3.1 | |
assertAlmostEqual(a,b, places=None) | 判斷a是否約等於b。 palces: 指定精確到小數點后多少位,默認為7 | ||
assertNotAlmostEqual(self, first, second, places=None) | |||
assertDictEqual(a,b) | dict==dict |
判斷字典a和字典b是否相等 | |
assertCountEqual(a,b) | list==list | 判斷a,b兩個列表元素相同 | |
assertMultiLineEqual(a,b) | text==text | 判斷a,b的文本一致 | |
assertLess(a,b) | a<b | 判斷a<b | |
assertLessEqual(a,b) | a<=b | 判斷a<=b | |
assertGreater(a,b) | a>b | 判斷a>b | |
assertGreaterEqual(a,b) | a>=b | 判斷a>=b |
4.測試套件的使用
import unittest from common.HTMLTestRunnerNew import HTMLTestRunner #生成html測試報告 HtmlTestRunner() from common import dir_config # 測試用例集的目錄 # TestSuite實例化 s = unittest.TestSuite() # 套件實例化 t = unittest.TestLoader() # 收集器實例化 # 將收集到的用例,放到測試套件當中。 s.addTests(t.discover(dir_config.test_cases_file)) # 打開一個html文件 fs = open(dir_config.html_file, "wb") # 實例化html結果的用例運行器 runner = HTMLTestRunner(fs,title="前程貸測試報告",description="前程貸接口測試!!",tester="administrator") # 運行測試套件 runner.run(s)