1、斷言介紹
在執行測試用例的過程中,最終用例是否執行通過,是通過判斷測試得到的實際結果和預期結果是否相等決定的,這時會用到斷言方法。
本著沒有訊息就是最好的訊息的原則,如果斷言成功不採取任何措施(不輸入任何日誌),否則就會觸發AssertionError
(斷言錯誤)的異常。
2、常用的斷言方法
斷言方法名稱 | 使用引數 | 驗證 |
---|---|---|
assertEqual() (常用) |
a,b,[msg='測試失敗時列印的資訊'] | 斷言a和b是否相等,相等則測試用例通過 |
assertNotEqual() |
a,b,[msg='測試失敗時列印的資訊'] | 斷言a和b是否相等,不相等則測試用例通過。 |
assertTrue() (常用) |
x,[msg='測試失敗時列印的資訊'] | 斷言x是否True,是True則測試用例通過 |
assertFalse() |
x,[msg='測試失敗時列印的資訊'] | 斷言x是否false,是false則測試用例通過 |
assertIs() |
a,b,[msg='測試失敗時列印的資訊'] | 斷言a是否是b,是則測試用例通過 |
assertNotIs() |
a,b,[msg='測試失敗時列印的資訊'] | 斷言a是否是b,不是則測試用例通過 |
assertIsNone() |
x,[msg='測試失敗時列印的資訊'] | 斷言x是否None,是None則測試用例通過 |
assertIsNotNone() |
x,[msg='測試失敗時列印的資訊'] | 斷言x是否None,不是None則測試用例通過。 |
assertIn() |
a,b,[msg='測試失敗時列印的資訊'] | 斷言a是否在b中,在b中則測試用例通過 |
assertNotIn() |
a,b,[msg='測試失敗時列印的資訊'] | 斷言a是否在b中,不在b中則測試用例通過 |
assertIsInstance() |
a,b,[msg='測試失敗時列印的資訊'] | 斷言a是否是b的一個例項,是則測試用例通過。 |
assertNotIsInstance() |
a,b,[msg='測試失敗時列印的資訊'] | 斷言a是否是b的一個例項,不是則測試用例通過。 |
提示:如果
a
和b
斷言失敗,則輸出msg
中定義的資訊,如果沒有定義msg
,則輸出系統異常。
3、斷言示例
"""
1.學習目標
必須掌握unittest中斷言使用
2.語法
2.1 編寫位置
在測試用例中去編寫,先執行測試用例,最後一行斷言。
2.2 使用的斷言方法
注意:前邊a是預期,後邊b是測試實際的值
(1)assertEqual(a,b,msg)
斷言a和b是否相等,如果相等,斷言成功,否則斷言失敗
(2)assertTrue(x,msg)
斷言條件x是否為True,如果是,斷言成功,否則斷言失敗
(3)其他斷言用法類似。
2.3 判定斷言結果
斷言成功,控制檯沒有任何提示
斷言失敗,控制檯AssertionError關鍵字會出現
3.需求
編寫一個有斷言的測試類
"""
# 1 匯入unittest
import unittest
# 2 建立測試類
class Test_demo(unittest.TestCase):
# 3 編寫test case
def test_case_03(self):
"""測試用例3"""
print("執行測試用例3")
# 用例步驟執行完成後做斷言
# assertEqual斷言a和b是否相等
self.assertEqual(2, 1 + 1, msg="斷言成功")
"""
執行結果:
斷言成功,控制檯沒有任何提示
下面是總測試結果的日誌:
執行測試用例3
# 在0.005秒內進行1次測試
Ran 1 test in 0.005s
# 測試用例全部通過
OK
"""
def test_case_02(self):
"""測試用例2"""
print("執行測試用例2")
# assertEqual斷言a和b是否相等
self.assertEqual(3, 1 + 1, msg="斷言失敗")
"""
執行結果:
執行測試用例2
斷言失敗
3 != 2
Expected(預期) :2
Actual(實際) :3
下面會有報錯資訊(主要內容):
AssertionError: 2 != 3 : 斷言失敗
# 在0.008秒內進行1次測試
Ran 1 test in 0.008s
# 失敗一個測試用例
FAILED (failures=1)
# 斷言失敗
Assertion failed
"""
def test_case_01(self):
"""測試用例1"""
print("執行測試用例1")
# 斷言條件x是否為True
self.assertTrue(1 > 2, msg="條件不成立,斷言失敗")
# 4 編寫普通方法
if __name__ == '__main__':
# 執行當前測試類中,以test開頭的測試用例
unittest.main()