在測試過程中,引數化是必不可少的功能,本文就討論下pytest的幾種引數化方法
1.內建的pytest.mark.parametrize裝飾器支援測試函式的引數化基本用法
例如:@pytest.mark.parametrize("input,expect",[("3+5",8),("5+5",9),("4+9",12),("10+21",31)])
def test_param(input,expect):
assert eval(input)==expect
結果:成功2個失敗2個.
2.它也可以標記單個測試例項在引數化,例如使用內建的mark.xfail
@pytest.mark.parametrize("input,expect",[("3+5",8),("5+5",9),("4+9",12),pytest.param("10+21",31,marks=pytest.mark.xfail)])
def test_param(input,expect):
assert eval(input)==expect
3.引數組合測試:
@pytest.mark.parametrize("x",[1,2,3,4])
@pytest.mark.parametrize("y",[3,4])
def test_param(x,y):
print("引數組合%s,******,%s"%(x,y))
結果會測試8次組合結果,如圖:
@pytest.fixture(params=[1,2,3,4,'abd']) ---可以是列表、也可以是元祖
def user(request): --- request是固定寫法
return request.param --request也是固定寫法
def test_login(user):
print("user:%s"%user)
輸出結果:
列表內包含字典資料格式引數化
例如有個登入視窗,分別驗證使用者名稱、密碼正確,使用者名稱、密碼正確,使用者名為空、密碼為空等情況,並有個預期結果驗證。
引數組成:
users =[,,
]**示例:
@pytest.fixture(params=users)
def user(request):
return request.param
def test_login(user):
username=user["username"]
password=user["password"]
if username=="test" and password=='test':
assert "login success" == user["expect"]
else:
pytest.xfail(reason="fail")
輸出結果:
Pytest框架引數化
本文主要介紹第二種引數化方式 pytest.mark.parametrize 引數名稱 lists or tuple or set 傳入單個引數。引數名稱僅作為引數名稱,便於記憶,可隨意起。引數不管是lists或是tuple型別都可以執行成功,另外集合型別set 順便試了一下也是成功的不過沒有特殊研...
pytest 之 fixture引數化
pytest 之 fixture引數化 前面通過unittest框架介紹了ui自動化po模式,basepage封裝後,unittest框架搭建的ui自動化框架,基本就成型了。前面的幾篇pytest文章,也簡要介紹了pytest和unittest框架的相同與不同之處。將unittest框架替換為pyt...
pytest 引數化昇華版
裝飾類,則類中所有的測試用例都是用這組引數 裝飾測試函式,只有被裝飾的函式使用這組引數 import pytest test datas 11,22,33 22,33,55 datas dict 方式一 直接寫 pytest.mark.parametrize a,b,c 1,2,3 4,5,9 de...