Pytest學習(九) - pytest.mark.parametrize的使用


一、前言

Pytest中裝飾器@pytest.mark.parametrize('參數名',list)可以實現測試用例參數化,類似DDT

二、如何使用

  • 第一個參數是字符串,多個參數中間用逗號隔開
  • 第二個參數是list,多組數據用元祖類型;傳三個或更多參數也是這樣傳。list的每個元素都是一個元組,元組里的每個元素和按參數順序一一對應
  • 傳一個參數 @pytest.mark.parametrize('參數名',list) 進行參數化
  • 傳兩個參數@pytest.mark.parametrize('參數名1,參數名2',[(參數1_data[0], 參數2_data[0]),(參數1_data[1], 參數2_data[1])]) 進行參數化

1、一個參數一個值

示例代碼如下:

# 一個參數一個值
@pytest.mark.parametrize("input", ["輸入值"])
def test_case1(input):
    print("\n" + input)
    assert input == "輸入值"

運行結果如下圖:

2、一個參數多個值

示例代碼如下:

@pytest.mark.parametrize("input", ["輸入值1", "輸入值2", "輸入值3", "輸入值4", "輸入值5"])
def test_case2(input):
    print("\n" + input)
    assert '輸入值' in input

運行結果如下:

3、多參數多值

示例代碼如下:

@pytest.mark.parametrize("userName,passWord",
                         [("xiaoqiang", "123456"), ("rose", "123456"), ("jone", "123456"), ("Alex", "123456")])
def test_login(userName, passWord):
    print(userName + " : " + passWord)
    assert userName == 'rose'

運行結果如下:

4、多個參數的混合使用

有點類似笛卡爾積的意思,示例代碼如下:

data1 = [1, 2]
data2 = ["python", "java"]
data3 = ["軟", "件", "測", "試", "君"]


@pytest.mark.parametrize("a", data1)
@pytest.mark.parametrize("b", data2)
@pytest.mark.parametrize("c", data3)
def test_case3(a, b, c):
    print(f"生成新的數據組合為:[{a} {b} {c}]")

運行結果如下:

5、參數化 ,傳入字典數據

示例代碼如下:

json=({"username":"alex","password":"123456"},{"username":"rongrong","password":"123456"})
@pytest.mark.parametrize('json', json)
def test_parametrize_1(json):
    print(f'字典為\n{json}')
    print(f'username : {json["username"]}, password : {json["password"]}')

運行結果如下:

6、參數化集合標記的使用

示例代碼如下:

@pytest.mark.parametrize("user,pwd",
                         [("xiaoqiang", "123456"), ("rose", "123456"),
                          pytest.param("jone", "123456", marks=pytest.mark.xfail),
                          pytest.param("Alex", "123456", marks=pytest.mark.skip)])
def test_login(user, pwd):
    print(user + " : " + pwd)
    assert user == "rose"

運行結果如下:


免責聲明!

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



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