簡介
在測試用例中,執(zhí)行完測試用例后,最后一步是判斷測試結(jié)果是 pass 還是 fail,自動化測試腳本里面一般把這種生成測試結(jié)果的方法稱為斷言(assert)。用 unittest 組件測試用例的時候,斷言的方法還是很多的,下面介紹幾種常用的斷
言方法:assertEqual、assertIn、assertTrue。想了解更多可以點(diǎn)擊?傳送門看一下最后的小結(jié)有大致介紹。
unittest斷言計劃是分上、中、下三篇有簡單到復(fù)雜的給小伙伴們介紹一下,填補(bǔ)一下這部分的空白。
基本斷言方法
基本的斷言方法提供了測試結(jié)果是True還是False。所有的斷言方法都有一個msg參數(shù),如果指定msg參數(shù)的值,則將該信息作為失敗的錯誤信息返回。
序號斷言方法斷言描述
1assertEqual(arg1, arg2, msg=None)驗證arg1=arg2,不等則fail
2assertNotEqual(arg1, arg2, msg=None)驗證arg1 != arg2, 相等則fail
3assertTrue(expr, msg=None)驗證expr是true,如果為false,則fail
4assertFalse(expr,msg=None)驗證expr是false,如果為true,則fail
5assertIs(arg1, arg2, msg=None)驗證arg1、arg2是同一個對象,不是則fail
6assertIsNot(arg1, arg2, msg=None)驗證arg1、arg2不是同一個對象,是則fail
7assertIsNone(expr, msg=None)驗證expr是None,不是則fail
8assertIsNotNone(expr, msg=None)驗證expr不是None,是則fail
9assertIn(arg1, arg2, msg=None)驗證arg1是arg2的子串,不是則fail
10assertNotIn(arg1, arg2, msg=None)驗證arg1不是arg2的子串,是則fail
11assertIsInstance(obj, cls, msg=None)驗證obj是cls的實例,不是則fail
12assertNotIsInstance(obj, cls, msg=None)驗證obj不是cls的實例,是則fail
簡單的case
1、實例,寫了四個測試用例,其中第四個是失敗的

2、運(yùn)行結(jié)果(python3)

python2

3、在python2中執(zhí)行的結(jié)果,中文編碼不對,沒正常顯示中文,遇到這種情況,可以自定義異常輸出,python3正常。有時候也可以根據(jù)實際需要采用自定義異常輸出,要靈活掌握。
參考代碼
1# coding=utf-8 2#1.先設(shè)置編碼,utf-8可支持中英文,如上,一般放在第一行 3 4#2.注釋:包括記錄創(chuàng)建時間,創(chuàng)建人,項目名稱。 5''' 6Created on2019-4-25 7@author: 北京-宏哥 8Project:學(xué)習(xí)和使用unittest框架編寫斷言 9'''10#3.導(dǎo)入unittest模塊11import unittest12#4.編寫測試用例和斷言1314class Test(unittest.TestCase):15? ? def test01(self):16'''判斷 a == b '''17a =118b =119? ? ? ? self.assertEqual(a, b)20? ? def test02(self):21'''判斷 a in b '''22a ="hello hongge"23b ="hello hongge and world!"24? ? ? ? self.assertIn(a, b)2526? ? def test03(self):27'''判斷 a is True '''28a = True29? ? ? ? self.assertTrue(a)3031? ? def test04(self):32'''失敗案例'''33a ="北京-宏哥"34b ="hongge"35? ? ? ? self.assertEqual(a, b)3637if__name__ =="__main__":38unittest.main()
自定義異常輸出
1、以 assertEqual 為例分析,在pycharm中通過ctrl(command)+???左鍵我們可以定位到方法的位置:
python3

python2

2、python2翻譯:如果兩個對象不能相等,就返回失敗,相當(dāng)于 return: first==second
? ? ? python3如果你斷言的 語句正確 則什么反應(yīng)都沒有,但是如果你出錯之后 就會報出 ? ?AssertionError 并且錯誤可以自己填寫。
3、這里除了相比較的兩個參數(shù) first 和 second,還有第三個參數(shù) msg=None,這個 msg 參數(shù)就是遇到異常后自定義輸出信息

4、參考代碼
# coding=utf-8#1.先設(shè)置編碼,utf-8可支持中英文,如上,一般放在第一行
#2.注釋:包括記錄創(chuàng)建時間,創(chuàng)建人,項目名稱。'''Created on2019-4-25@author: 北京-宏哥
Project:學(xué)習(xí)和使用unittest框架編寫斷言'''#3.導(dǎo)入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()
小結(jié)
unittest斷言開篇就介紹這里,另外大家也不要糾結(jié)python2或者python3,建議小伙伴們使用python3,因為python2到2020年官方就好像不會維護(hù)了?。?!