天天看點

Pytest05:參數化測試

參數化測試是指 允許傳遞多組資料,對多組資料進行循環調用,pytest 會及時報告失敗和passed case.

1.一組資料

咱們先看隻有一組資料:

def test_add():
    def equivalent(a,b):
        return  a+b
    assert 10 == equivalent(5, 5)

           

執行結果如圖:

Pytest05:參數化測試

測試通過了,但隻是一條,能不能批量呢? 難不倒優秀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)

文法要記住

  1. @pytest.mark.parametrize(argnames,argvalues) , 在函數添加了裝飾器
  2. argnames 要用 ‘args1 ,args2,args3’ , 用單引号并args 之間用逗号隔開,相當于Key
  3. argvalues 要用[(args1_value,args2_value,args3_value),(args1_value,args2_value,args3_value)]

    使用中括号,并用tuple 和args 對應,順序不能變哦.

    咱們看看執行結果吧

    Pytest05:參數化測試

資訊相當清晰, 參數 8-8 傳入的參數校驗失敗,并指出了 assert 10 ==16 是錯的.

如果想看passed 參數的情況,可以用-v 檢視 ,請看截圖:

Pytest05:參數化測試

【5-5】,【6-4】等都顯示了出來 .

剛才的小夥伴提出了,我隻想運作 【3-7】這個參數,有辦法嗎, 當然可以了, 看下邊的截圖

Pytest05:參數化測試

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)

           

列印結果如下:

Pytest05:參數化測試

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 可以放多個值,

輸出結果如下:

Pytest05:參數化測試

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 .

有了解錯誤,或者好的建議請留言 ,謝謝

繼續閱讀