pytest學習筆記-引數化學習筆記(四)
阿新 • • 發佈:2020-12-08
一、測試用例的引數化:在自動化測試中,一個測試用例對應一個測試點,
通常一組資料沒辦法覆蓋所有的測試場景,所以需要通過引數化 去傳遞多組測試資料。
二、熟悉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))
執行結果為: