參數化測試是指 允許傳遞多組資料,對多組資料進行循環調用,pytest 會及時報告失敗和passed case.
1.一組資料
咱們先看隻有一組資料:
def test_add():
def equivalent(a,b):
return a+b
assert 10 == equivalent(5, 5)
執行結果如圖:

測試通過了,但隻是一條,能不能批量呢? 難不倒優秀pytest 同學, 使用
2.批量參數
@pytest.mark.parametrize(argnames,argvalues)
修改代碼如下:
import pytest
@pytest.mark.parametrize('a,b',[(5,5),(6,4),(3,7),(8,8)])
def test_add(a,b):
def equivalent(a,b):
return a+b
assert 10 == equivalent(a,b)
我們傳遞了 四組資料>(5,5),(6,4),(3,7),(8,8)
文法要記住
- @pytest.mark.parametrize(argnames,argvalues) , 在函數添加了裝飾器
- argnames 要用 ‘args1 ,args2,args3’ , 用單引号并args 之間用逗号隔開,相當于Key
-
argvalues 要用[(args1_value,args2_value,args3_value),(args1_value,args2_value,args3_value)]
使用中括号,并用tuple 和args 對應,順序不能變哦.
咱們看看執行結果吧
Pytest05:參數化測試
資訊相當清晰, 參數 8-8 傳入的參數校驗失敗,并指出了 assert 10 ==16 是錯的.
如果想看passed 參數的情況,可以用-v 檢視 ,請看截圖:
【5-5】,【6-4】等都顯示了出來 .
剛才的小夥伴提出了,我隻想運作 【3-7】這個參數,有辦法嗎, 當然可以了, 看下邊的截圖
3. 參數的資料分離
@pytest.mark.parametrize(‘a,b’,[(5,5),(6,4),(3,7),(8,8)]) ,我們直接把資料傳入不大友好,
我們修改下:
import pytest
data=[(5,5),(6,4),(3,7),(8,8)]
@pytest.mark.parametrize('a,b',data)
def test_add(a,b):
def equivalent(a,b):
return a+b
assert 10 == equivalent(a,b)
data=[(5,5),(6,4),(3,7),(8,8)]
我們同樣也可以為類添加 @pytest.mark.parametrize
修改代碼如下 :
import pytest
data=[(5,5),(6,4),(3,7),(8,8)]
@pytest.mark.parametrize('a,b',data)
class Test_add:
def test_add(self,a,b):
def equivalent(a,b):
return a+b
assert 10 == equivalent(a,b)
列印結果如下:
4. @pytest.mark.parametrize 添加ID辨別
文法為 pytest.param(,id=“something”)
修改代碼:
import pytest
data=[pytest.param(5,5,id="5+5:passed"),pytest.param(6,4,id="6+4:passed"),pytest.param(5,4,id="5+4:failed")]
@pytest.mark.parametrize('a,b',data)
class Test_add:
def test_add(self,a,b):
def equivalent(a,b):
return a+b
assert 10 == equivalent(a,b)
可以看出value 可以放多個值,
輸出結果如下:
test_add_variety.py::Test_add::test_add**[5+5:passed]** PASSED [ 33%]
test_add_variety.py::Test_add::test_add[6+4:passed] PASSED [ 66%]
test_add_variety.py::Test_add::test_add[5+4:failed] FAILED [100%]
其中test_add[5+5:passed] 中括号裡顯示我們的id .
有了解錯誤,或者好的建議請留言 ,謝謝