現在正在使用 unittest 框架,我們來記錄下這個框架的知識點;
unittest 框架:我們在寫接口用例的時候,會繼承 unittest 當中的 TestCase 的類和方法,私有方法除外,來識別以 test_ 開頭的測試用例,unittest 相當於是一個包,我們來使用包里面的工具;
什么是自動化測試:寫一段程序去測試另一段程序是否正常的過程
1. 單元測試的概念
- 測試不是來測試Java寫的模塊、函數、類
- 而是測試代碼輸入和輸出,比對是否正確
- 往往單元測試, 是有開發來寫, 用於測試自己寫的模塊、函數、類是否正確
- 有的一些單元測試任務, 是由測試人員來寫
- 單元測試, 是一個極其強大的測試斷言工具
2. 單元測試的作用
對代碼中的函數、類、模擬進行測試
輔助進行接口測試,將預期結果與實際結果進行對
3. 運行 unittest 的時候, 我們就調用父類的 main() 方法來運行
if __name__ == '__main__': unittest.main()
4. unittest 框架中,如何測試多條用例?用例執行順序?如何記錄判斷接口的成功與失敗的用例
如何測試多條用例?
- 定義一個繼承unittest的測試類, 為每個測試用例定義一個以test.開頭的實例方法
用例執行順序?
- 以test _開頭的實例方法名稱的ASCII碼數值,從小到大的順序來執行
總結:
- unittest 框架會把以 test_ 開頭的實例方法識別為用例, 同時會自動執行
- 如果不是 test_ 開頭的方法, 那么不會被當做用例當自動執行
- 以test_開頭的實例方法名稱的 ASCII 碼數值,從小到大的順序執行
- 使用 try..except.... 來記錄成功與失敗的用例總數
- 測試用例失敗后需要主動拋出異常,增加日志文件,記錄測試用例的結果
- 執行的總用例數為: 所有以test_開頭的實例方法總數
- 失敗的用例總數為, 拋出異常的實例方法總數
5. unittest 框架中為我們提供了強大的斷言方法,我們來記錄下常用的幾個
self.assertEqual():斷言實際結果與預期結果是否相等;第一個參數為期望值,第二個參數為實際值,第三個參數 msg 為斷言失敗之后的報錯信息
self.assertIn():成員運算第一個表達式是否是第二個表達式的成員
self.assertTrue():斷言這個表達式是否為True,如果為True則成功,不為True則失敗
self.assertIsInstance():斷言第一個是否是第二個參數的實例(判斷是否是list類型)
self.assertIsNone():斷言字段obj數值不為空
self.assertIs():判斷兩個對象是不是同一個對象,id是否一致
self.assertRaises():拋出異常
import unittest class TestClass01(unittest.TestCase): def test_case01(self): # 把鼠標放在實例方法名上來運行用例, 那么只會運行當前一條用例 # assertTrue 判斷是否為真,isupper(一字歐噴)全部為為大寫 self.assertTrue("PYTHON".isupper(), msg="測試是否為大寫失敗") def test_case02(self): A = "北辰" B = ["休想", "默", "生如花開", "蝶影飛雪", "北辰"] # assertIn 判斷 A 是否在 B 中 self.assertIn(A, B) def test_case03(self): one_var = [100, 200] # 判斷這個函數是否為指定類型 列表 self.assertIsInstance(one_var, list) if __name__ == '__main__': unittest.main()
6. Python 接口自動化用例執行之前需要使用:setUp、tearDown;setUpClass、tearDownClass
setUp :每個用例執行之前調用
tearDown :每個用例執行之后調用
setUpClass :(譯:賽特阿婆.克拉斯)所有用例執行之前調用 TestCase 中 setUpClass 類方法;需要使用裝飾器來@classmethod
tearDownClass:(譯:緹歐當.克拉斯)所有用例執行之后會調用 TestCase 中 tearDownClass 類方法;需要使用裝飾器來@classmethod
通常我們會使用 setUpClass 、tearDownClass 需要定義為類方法,如果不定義就沒有所有用例之前之后調動的這種特性;
@classmethod
7. Python 中常用的裝飾器
@classmethod:定義為類方法(譯:可拉斯.滿澀的)
@staticmethod:定義為靜態方法(譯:斯達提克.滿澀的)
*******請大家尊重原創,如要轉載,請注明出處:轉載自:https://www.cnblogs.com/shouhu/ 謝謝!!*******