@pytest.mark.parametrize 參數化總結


pytest.mark.parametrize 參數化

pytest允許在多個級別啟用測試參數化:

  • pytest.fixture() 允許fixture有參數化功能(后面講解)
  • @pytest.mark.parametrize 允許在測試函數或類中定義多組參數和fixtures
  • pytest_generate_tests 允許定義自定義參數化方案或擴展(拓展)

知識儲備尚淺,目前知道的不多

參數化場景

只有測試數據和期望數據不一致,但是操作步驟是一樣的測試用例可以用參數化

上代碼實戰:

import pytest

# def test_case01():
#     assert 1+1 == 2
#
# def test_case02():
#     assert 2+3 == 6
#
# def test_case03():
#     assert 8+7 == 20

@pytest.mark.parametrize('inbody,expdata',[('1+1',2),('2+3',6),('8+7',20)])
def test_case04(inbody,expdata):
    assert eval(inbody) == expdata

可以看到注釋的代碼 寫的太冗余 雞肋 ,而參數化
(煎蛋) ,節省時間代碼

參數化的格式:

必須是系列表:

​ 只有一個參數時: @pytest.mark.parametrize("inbody", ["xx", "xx1", "xx2"])

​ 多個參數時:@pytest.mark.parametrize("inbody,inbody1", [("xx", "123"), ("xx1", "123"), ("xx2", "123")])

備注:雖然源碼說需要list包含tuple,但我試了下,tuple包含list,list包含list也是可以的........

https://www.cnblogs.com/blog-123/p/14590493.html 數據驅動可以這里了解

實際Web UI和 Api自動化中的開發場景,比如是一個登錄框
  1. 你肯定需要測試賬號空、密碼空、賬號密碼都為空、賬號不存在、密碼錯誤、賬號密碼正確等情況
  2. 這些用例的區別就在於輸入的測試數據和對應的交互結果
  3. 所以我們可以只寫一條登錄測試用例,然后把多組測試數據和期望結果參數化,節省很多代碼量

重點

當裝飾器 @pytest.mark.parametrize 裝飾測試類時,會將數據集合傳遞給類的所有測試用例方法

# 笛卡爾積,組合數據
data_1 = [1, 2, 3]
data_2 = ['a', 'b']


@pytest.mark.parametrize('a', data_1)
@pytest.mark.parametrize('b', data_2)
def test_parametrize_1(a, b):
    print(f'笛卡爾積 測試數據為 : {a},{b}')

參數化,標記數據

# 標記參數化
@pytest.mark.parametrize('inbody,expdata',[('1+1',2),('3+4',8),('6+6',13),
                    pytest.param('4+4',9,marks=pytest.mark.xfail),
                    pytest.param('6*6',67,marks=pytest.mark.xfail)])
def test_mark(inbody,expdata):
    assert eval(inbody) == expdata


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM