簡介
在測試用例中,執行完測試用例后,最后一步是判斷測試結果是 pass 還是 fail,自動化測試腳本里面一般把這種生成測試結果的方法稱為斷言(assert)。用 unittest 組件測試用例的時候,斷言的方法還是很多的,下面介紹幾種常用的斷
言方法:assertEqual、assertIn、assertTrue。想了解更多可以點擊 傳送門 看一下最后的小結有大致介紹。
unittest斷言計划是分上、中、下三篇有簡單到復雜的給小伙伴們介紹一下,填補一下這部分的空白。
基本斷言方法
基本的斷言方法提供了測試結果是True還是False。所有的斷言方法都有一個msg參數,如果指定msg參數的值,則將該信息作為失敗的錯誤信息返回。
序號 | 斷言方法 | 斷言描述 |
---|---|---|
1 | assertEqual(arg1, arg2, msg=None) | 驗證arg1=arg2,不等則fail |
2 | assertNotEqual(arg1, arg2, msg=None) | 驗證arg1 != arg2, 相等則fail |
3 | assertTrue(expr, msg=None) | 驗證expr是true,如果為false,則fail |
4 | assertFalse(expr,msg=None) | 驗證expr是false,如果為true,則fail |
5 | assertIs(arg1, arg2, msg=None) | 驗證arg1、arg2是同一個對象,不是則fail |
6 | assertIsNot(arg1, arg2, msg=None) | 驗證arg1、arg2不是同一個對象,是則fail |
7 | assertIsNone(expr, msg=None) | 驗證expr是None,不是則fail |
8 | assertIsNotNone(expr, msg=None) | 驗證expr不是None,是則fail |
9 | assertIn(arg1, arg2, msg=None) | 驗證arg1是arg2的子串,不是則fail |
10 | assertNotIn(arg1, arg2, msg=None) | 驗證arg1不是arg2的子串,是則fail |
11 | assertIsInstance(obj, cls, msg=None) | 驗證obj是cls的實例,不是則fail |
12 | assertNotIsInstance(obj, cls, msg=None) | 驗證obj不是cls的實例,是則fail |
簡單的case
1、實例,寫了四個測試用例,其中第四個是失敗的
2、運行結果(python3)
python2
3、在python2中執行的結果,中文編碼不對,沒正常顯示中文,遇到這種情況,可以自定義異常輸出,python3正常。有時候也可以根據實際需要采用自定義異常輸出,要靈活掌握。
參考代碼
1 # coding=utf-8 2 #1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行 3 4 #2.注釋:包括記錄創建時間,創建人,項目名稱。 5 ''' 6 Created on 2019-4-25 7 @author: 北京-宏哥 8 Project:學習和使用unittest框架編寫斷言 9 ''' 10 #3.導入unittest模塊 11 import unittest 12 #4.編寫測試用例和斷言 13 14 class Test(unittest.TestCase): 15 def test01(self): 16 '''判斷 a == b ''' 17 a = 1 18 b = 1 19 self.assertEqual(a, b) 20 def test02(self): 21 '''判斷 a in b ''' 22 a = "hello hongge" 23 b = "hello hongge and world!" 24 self.assertIn(a, b) 25 26 def test03(self): 27 '''判斷 a is True ''' 28 a = True 29 self.assertTrue(a) 30 31 def test04(self): 32 '''失敗案例''' 33 a = "北京-宏哥" 34 b = "hongge" 35 self.assertEqual(a, b) 36 37 if __name__ == "__main__": 38 unittest.main()
自定義異常輸出
1、以 assertEqual 為例分析,在pycharm中通過ctrl(command)+🖱️左鍵我們可以定位到方法的位置:
python3
python2
2、python2翻譯:如果兩個對象不能相等,就返回失敗,相當於 return: first==second
python3如果你斷言的 語句正確 則什么反應都沒有,但是如果你出錯之后 就會報出 AssertionError 並且錯誤可以自己填寫。
3、這里除了相比較的兩個參數 first 和 second,還有第三個參數 msg=None,這個 msg 參數就是遇到異常后自定義輸出信息
4、參考代碼
# coding=utf-8 #1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行 #2.注釋:包括記錄創建時間,創建人,項目名稱。 ''' Created on 2019-4-25 @author: 北京-宏哥 Project:學習和使用unittest框架編寫斷言 ''' #3.導入unittest模塊 import unittest #4.編寫測試用例和斷言 class Test(unittest.TestCase): def test01(self): '''判斷 a == b ''' a = 1 b = 1 self.assertEqual(a, b) def test02(self): '''判斷 a in b ''' a = "hello hongge" b = "hello hongge and world!" self.assertIn(a, b) def test03(self): '''判斷 a is True ''' a = True self.assertTrue(a) def test04(self): '''失敗案例''' a = "北京-宏哥" b = "hongge" self.assertEqual(a, b,msg='失敗原因: %s!=%s'%(a,b)) if __name__ == "__main__": unittest.main()
小結
unittest斷言開篇就介紹這里,另外大家也不要糾結python2或者python3,建議小伙伴們使用python3,因為python2到2020年官方就好像不會維護了!!!