在unittest單元測試中也提供了斷言的方式,通過斷言判斷用例有沒有成功。
unittest常用斷言
unittest框架的TestCase類提供以下方法用於測試結果的判斷
方法 | 檢查 |
assertEqual(a, b) | a ==b |
assertNotEqual(a, b) | a !=b |
assertTrue(x) | bool(x) is True |
assertFalse(x) | Bool(x) is False |
assertIs(a, b) | a is b |
assertIsNot(a, b) | a is not b |
assertIsNone(x) | x is None |
assertIsNotNone(x) | x is not None |
assertIn(a, b) | a in b |
assertNotIn(a, b) | a not in b |
assertIsInstance(a, b) | isinstance(a,b) |
assertNotIsInstance(a, b) | not isinstance(a,b) |
舉例說明
列舉了上面的方法其中3個,然后觀察可以看出來其中前2條用例斷言是正確的,但是最后一個是斷言失敗的用例
# coding:utf-8 import unittest class Test(unittest.TestCase): def test01(self): ''' 判斷 a = b ''' a = '111' b = '111' self.assertEqual(a,b) def test02(self): ''' a 存在 b 之中 ''' a = '安靜' b = '測試-安靜' self.assertIn(a,b) def test03(self): ''' 失敗用例 ''' a = '安靜' b = '測試-安靜' self.assertNotIn(a,b) if __name__ == '__main__': unittest.main()
通過執行后我們看下結果提示2個通過,1個是失敗的,失敗的原因也打印出來了
有的小伙伴們肯定會說,這個報錯看不懂,那么能有更清楚的報錯嗎?當然了。unittest這里提供了我們自己進行設置報錯信息
自定義報錯信息
我們直接在斷言的后面添加想要的報錯信息
def test03(self): ''' 失敗用例 ''' a = '安靜' b = '測試-安靜' self.assertNotIn(a,b,msg='報錯原因,%s沒有包含%s'%(a,b))
通過執行后,我們在看下報錯的信息,這次就很明錯了。
小試牛刀
看了上面的內容大家都會了,但是不動手做一做怎么知道自己到底會不會呢?前面安靜也寫了關於requests的一些內容,我們就通過request+unittest完成我們的簡單接口自動化
接口信息
接口:https://api.apiopen.top/searchMusic
參數:name:歌曲名稱
按照上面的接口信息,簡單的寫了幾個用例。可能有的小伙伴們就怕執行后報錯,那我們就通過try把錯誤異常捕捉。(這里沒有具體的完善代碼格式哈)
這里接口返回的內容可以通過json格式轉換,讓我們更加清楚的去尋找我們想要的數據
# coding:utf-8 import unittest import requests class Music(unittest.TestCase): def test01(self): url = 'https://api.apiopen.top/searchMusic' data = { "name":"斷橋殘雪" } r = requests.post(url,data=data) b = r.json()['result'][0]['title'] a = '斷橋殘雪' self.assertEqual(a,b) print('第一個用例通過') def test02(self): url = 'https://api.apiopen.top/searchMusic' data = { "name":"說好不哭" } r = requests.post(url,data=data) a = '周傑倫' b = r.text self.assertIn(a,b) print('第二個用例通過') def test03(self): url = 'https://api.apiopen.top/searchMusic' data = { "name":"芒種" } r = requests.post(url,data=data) a = '抖音' b = r.text try: self.assertIn(a,b,msg='\n抖音不存在芒種歌曲信息中') except Exception as msg: print('錯誤信息%s'%msg) print('第三個用例失敗') if __name__ == '__main__': unittest.main()
話不多說,我們直接執行。可以看到前面2個已經全部通過了,但是最后一個用例失敗了,失敗的原因也打印出來了。
我們會發現上面的代碼有很多重復的地方,大家可以嘗試解決代碼重復性的問題哈,
通過簡單的例子完成了對unittest中的斷言了解,具體的大家要動手去操作,俗話說熟能生巧,在那個場景下需要用到什么樣的斷言方便,這個都是需要自己一點點的操作后總結出來的
如果感覺安靜寫的對您有幫助的話,右下角可以點個關注,哪里有寫錯的地方或者不懂的地方可以下方留言,看到后第一時間回復~~~