Pytest學習(十) - parametrize、fixture、request的混合使用


一、前言

上篇文章有提及pytest.mark.parametrize的使用,這次在此基礎上結合fixture和request再做個延伸。

二、傳單個參數

即一個參數一個值,示例代碼如下:

# 傳單個參數
@pytest.fixture()
def getuser(request):
    user = request.param
    print(f" 獲取用戶: {user}")
    return user


data = ["lilei", "jojo", "hanmeimei"]
# 用英文哈,中文會被加密
ids = [f" mark input :{user} " for user in data]


@pytest.mark.parametrize("getuser", data, ids=ids, indirect=True)
class TestClass(object):
    def test_getuser(self, getuser):
        print(f"輸出用戶信息:{getuser}")

運行結果如下:

說明:
僅當 indirect=True,getuser才會當成一個函數去執行,而不是一個參數,並將data當做參數傳入函數,test_getuser(self, getuser),這里的getuser是獲取fixture返回的值。

三、傳多個參數

即結合字典的使用,示例代碼如下:

# 傳多個參數
@pytest.fixture()
def getlogins(request):
    param = request.param
    print(f" 獲取用戶名: {param['username']} 獲取密碼:{param['password']}")
    return param


data = [{"username": "jojo", "password": "123456"},
        {"username": "hanmeimei", "password": "123456"},
        {"username": "lilei", "password": "123456"}]


@pytest.mark.parametrize("getlogins", data, indirect=True)
def test_getlogin(getlogins):
    print(f"用戶名:{getlogins['username']} 密碼:{getlogins['password']}")

運行結果如下:

四、一個裝飾器加多個fixture

一個裝飾器的意思就是,數據源是一個,這次我們用元祖來做數據源,示例代碼如下:

# 一個裝飾器+多個fixture
@pytest.fixture(scope="module")
def getusername(request):
    username = request.param
    print(f" username is {username}")
    return username


@pytest.fixture(scope="module")
def getpassword(request):
    password = request.param
    print(f" password is {password}")
    return password


data = [("jojo", "1"), ("lilei", "123654")]


@pytest.mark.parametrize("getusername,getpassword", data, indirect=True)
def test_getUserinfo(getusername, getpassword):
    print(f"用戶名:{getusername} 密碼:{getpassword}")

運行結果如下:

五、多個裝飾器+多個fixture

就是多個數據源,這次用list來做演示,示例代碼如下:

# 多個裝飾器+多個fixture
@pytest.fixture()
def users(request):
    user = request.param
    print(f" 用戶名:{user}")
    return user


@pytest.fixture()
def pwds(request):
    pwd = request.param
    print(f" 密碼:{pwd}")
    return pwd


data1 = ["lilei", "hameimei", "jojo"]
data2 = ["1", "2", "3"]


@pytest.mark.parametrize("users", data1, indirect=True)
@pytest.mark.parametrize("pwds", data2, indirect=True)
def test_getuserinfo(users, pwds):
    print(f"用戶名為:{users} 密碼為:{pwds}")

運行結果如下:

細心的同學可能會發現,這塊和上篇文章第4小結一樣,多個參數的混合使用,類似笛卡爾積的意思。
注意:
當多個參數時,需要用 變量=request.param來接收參數,否則不好用哦。


免責聲明!

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



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