1. 程式人生 > 實用技巧 >pytest學習筆記-引數化學習筆記(四)

pytest學習筆記-引數化學習筆記(四)

一、測試用例的引數化:在自動化測試中,一個測試用例對應一個測試點,
通常一組資料沒辦法覆蓋所有的測試場景,所以需要通過引數化 去傳遞多組測試資料。

二、熟悉unittest的人應該知道,unittest採用ddt資料驅動的方式實現引數化,
那麼pytest呢,它本身是支援引數化的,不需要額外安裝外掛,而是通過@pytest.mark.parameterize 這樣一個裝飾器 來實現。

三、@pytest.mark.parameterize的語法

parametrize(self,argnames, argvalues, indirect=False, ids=None, scope=None)
# argnames:引數名
# argvalues:引數值列表,如果是一個引數,裡面就是值的列表,比如:parameterize(“username”,["yy1","yy2","yy3"])
            # 如果是多個引數,就需要用元組來存放值,每個元組對應一組引數的值,
            # 比如:parameterize("username,pwd",[("yy1","pwd1"),("yy2","pwd2"),("yy3","pwd3")])
# ids:用例的ID,其實是一個字串列表,比如:["case1","case2","case3"]用來標識每一個測試用例,可以自定義。

程式碼實戰:
---------------------------------------一個引數-------------------------------------------------

data = ["小明","小紅"]
@pytest.mark.parametrize("username",data)
def test_login(username):
    print('測試資料為:{}'.format(username))

執行結果為:

-----------------------------------------多個引數----------------------------------------------


一、引數值列表巢狀字典

# 列表巢狀字典
data_1 = [
    {"username":"lqw","pwd":"123456"},
    {"username":"tzy","pwd":"777777"},
    {"username":"yyy","pwd":"323232"}
]
@pytest.mark.parametrize("data",data_1)
def test_login(data):
    print("使用者名稱:{},密碼:{}".format(data["username"],data["pwd"]))


if __name__ == "__main__":
    pytest.main(['-s','-v','test_parameterize.py'])

執行結果:

二、引數值列表巢狀列表

# 列表巢狀列表
data_2 = [
    ["lqw","12324"],
    ["tzy","23232"],
    ["yyy","65656"]
]
@pytest.mark.parametrize("username,pwd",data_2)
def test_login2(username,pwd):
    print("使用者名稱為:{},密碼為:{}".format(username,pwd))


if __name__ == "__main__":
    pytest.main(['-s','test_parameterize.py'])

執行結果:

三、引數值列表巢狀元組

# 列表巢狀元組
data_3 = [
    ("lqw","12321"),
    ("tzy","34324"),
    ("yyy","67676")
]
@pytest.mark.parametrize("username,pwd",data_3)
def test_login3(username,pwd):
    print("使用者名稱為:{},密碼為:{}".format(username,pwd))

執行結果為: