今天這篇技術文章要分享的是pytest框架當中的斷言。會從以下幾個方面來分享:
一、斷言的概念
簡單來講就是實際結果和期望結果去對比,符合預期結果那就測試通過,不符合預期那就測試失敗。
二、pytest框架斷言常用的方法
在pytest框架里面,斷言主要是用到assert
assert xx 判斷xx為真
assert not xx 判斷xx不為真
assert a in b 判斷b包含a
assert a == b 判斷a等于b
assert a != b 判斷a不等于b
三、pytest框架的斷言與unittest框架的斷言有什么區別
在pytest框架里面,斷言只用一種方式assert就可以實現了,簡單方便。
unittest框架里面,斷言分了好幾種類型:
1、基本的布爾斷言,即:要么正確,要么錯誤的驗證
斷言方法 斷言描述
assertEqual(arg1, arg2, msg=None) 驗證arg1=arg2,不等則fail
assertNotEqual(arg1, arg2, msg=None) 驗證arg1 != arg2, 相等則fail
assertTrue(expr, msg=None) 驗證expr是true,如果為false,則fail
assertFalse(expr,msg=None) 驗證expr是false,如果為true,則fail
assertIs(arg1, arg2, msg=None) 驗證arg1、arg2是同一個對象,不是則fail
assertIsNot(arg1, arg2, msg=None) 驗證arg1、arg2不是同一個對象,是則fail
assertIsNone(expr, msg=None) 驗證expr是None,不是則fail
assertIsNotNone(expr, msg=None) 驗證expr不是None,是則fail
assertIn(arg1, arg2, msg=None) 驗證arg1是arg2的子串,不是則fail
assertNotIn(arg1, arg2, msg=None) 驗證arg1不是arg2的子串,是則fail
assertIsInstance(obj, cls, msg=None) 驗證obj是cls的實例,不是則fail
assertNotIsInstance(obj, cls, msg=None) 驗證obj不是cls的實例,是則fail
2.比較斷言,如比較兩個變量的值(跟上面的布爾斷言區別不大,主要是通過比較兩個變量的值得出布爾值)
assertAlmostEqual (first, second, places = 7, msg = None, delta = None)
驗證first約等于second。 palces: 指定精確到小數點后多少位,默認為7
assertNotAlmostEqual (first, second, places, msg, delta)
驗證first不約等于second。 palces: 指定精確到小數點后多少位,默認為7
注: 在上述的兩個函數中,如果delta指定了值,則first和second之間的差值必須≤delta
assertGreater (first, second, msg = None)
驗證first > second,否則fail
assertGreaterEqual (first, second, msg = None)
驗證first ≥ second,否則fail
assertLess (first, second, msg = None)
驗證first < second,否則fail
assertLessEqual (first, second, msg = None)
驗證first ≤ second,否則fail
assertRegexpMatches (text, regexp, msg = None)
驗證正則表達式regexp搜索匹配的文本text。 regexp:通常使用re.search()
assertNotRegexpMatches (text, regexp, msg = None)
驗證正則表達式regexp搜索不匹配的文本text。 regexp:通常使用re.search()
3.復雜斷言(一般用的比較少,像斷言兩個列表、元組等) (省略)
從上面也可以看出來,unittest框架的斷言的確是比pytest框架要復雜很多。
四、pytest框架斷言的使用
除了上面說的常用的斷言方法:
assert xx 判斷xx為真
assert not xx 判斷xx不為真
assert a in b 判斷b包含a
assert a == b 判斷a等于b
assert a != b 判斷a不等于b
還可以這么用:
1、想知道斷言失敗時的一些關于失敗的原因等說明信息,assert也能滿足該功能。
assert 斷言的內容,”斷言的說明”
2、一些測試用例中,比如異常測試用例,測試的結果必然是失敗會報出異常的。這時候用例的期望結果就是該異常。
對于異常的斷言,Pytest的語法是:with pytest.raises(異常類型)
最后給大家附上代碼:
# #!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author : 九九
# @FileName: test_assert.py
# @Software: PyCharm
import pytest
# 定義一個測試類
class TestAssert():
# 定義一個功能
# 傳一個變量,判斷變量是否為偶數,如果為偶數則用例通過,否則用例失敗
def func1(self,a):
if a%2==0:
return True
else:
return False
# 定義一個測試用例
def test_func1(self):
assert self.func1(3)
# 定義一個測試用例,驗證包含斷言的方法
def test_in(self):
# 定義一個列表
list_demo=[1,2,3,4,5,6]
# 驗證數字3是不是在list_demo里面,如果在,則用例通過,否則用例失敗
assert 3 in list_demo
# 定義一個測試用例,驗證斷言的不包含方法
def test_notin(self):
list_demo = [1, 2, 3, 4, 5, 6]
# 驗證數字7不包含在list_demo里面,如果不包含,則用例通過,否則用例失敗
assert 5 not in list_demo
# 定義一個測試用例,驗證斷言的判斷相等的方法
def test_ass(self):
name="九九"
assert name=="九","變量的名字,和最終預期的名字不一致,所以失敗"
# 定義一個測試用例,驗證異常信息斷言
def test_zero_division(self):
# 斷言異常
with pytest.raises(ZeroDivisionError) as exc:
1/0
# 判斷異常的類型是否和預期一致
assert exc.type==ZeroDivisionError
# 斷言異常的value值和預期是否一致
assert "division by sss" in str(exc.value)
更多關于軟件測試培訓的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓服務經驗,采用全程面授高品質、高體驗培養模式,擁有國內一體化教學管理及學員服務,助力更多學員實現高薪夢想。