pytest介面測試之fixture傳引數request

大雄45發表於2021-09-11
導讀 本文主要介紹了pytest介面測試之fixture傳引數request的使用,文中透過示例程式碼介紹的非常詳細,具有一定的參考價值,感興趣的小夥伴們可以參考一下
前言

有的測試用例,需要依賴於某些特定的case才可以執行,比如登入獲取到token,後面的請求都需要帶著,為了確保在同一使用者,必須帶著和登入時獲取的cookies。

大部分的用例都會先登入,就需要把登入單獨抽出來寫個函式,其他用例全部呼叫這個登入函式就行,但是登入的賬號不能寫死。

一、函式傳參

單獨寫個登入函式,傳2個引數user和password,寫用例的時候呼叫登入函式,輸入幾組user、password引數化。需要用到裝飾器$pytest.mark.parametrize,裡面寫兩個引數

第1個引數是字串,多個引數中間用逗號隔開

第2個引數是list,多組陣列用元組型別

import pytest
 
def login(user, password):
    '''登入函式'''
    print('使用者名稱:%s' % user)
    print('密碼:%s' % password)
    return 'hello'
 
login_data = [('admin', '123456'), ('admin','')]
 
# 裝飾器
@pytest.mark.parametrize('user, password', login_data)
def test_login(user, password):
    '''登入測試用例'''
    result = login(user, password)
    assert result == 'hello'
 
if __name__ == '__main__':
    pytest.main('-s', 'day0110_fixture.py')
'''
執行結果
============================= test session starts =============================
platform win32 -- Python 3.6.6, pytest-4.5.0, py-1.8.0, pluggy-0.13.1
rootdir: F:\python work\youyou_class\study_pytestcollected 2 items
 
day0110_fixture.py .使用者名稱:admin
密碼:123456
.使用者名稱:admin
密碼:
                                                    [100%]
 
========================== 2 passed in 0.02 seconds ===========================
'''
request引數

request就是我需要什麼東西,用來接受引數,用到@pytest.fixture裝飾器,傳參就用預設的request引數,user = request.param 這一步是接收傳入的引數。

import pytest
 
# 測試賬號資料
test_data = ["admin1", "admin2"]
 
@pytest.fixture(scope="function")
def login(request):
    user = request.param
    print("登入賬戶:%s"%user)
    return user
 
@pytest.mark.parametrize("login", test_data, indirect=True)
def test_login(login):
    """登入用例"""
    a = login
    print("測試用例中login的返回值:%s" % a)
    assert a != ""

indirect=True 引數是為了把login當作一個函式去執行,而不是一個引數

request傳兩個引數

如果用到@pytest.fixture,裡面用2個引數情況,可以把多個引數用一個字典去儲存,這樣最終還是隻傳一個引數。

不同的引數再從字典裡面取對應key值就行,如: user = request.param[“user”]

#_*_coding:utf-8_*_
# 作者     :Administrator
# 建立時間 :2020/1/1018:18
# 檔案     :day0110_fixture.py
 
import pytest
 
@pytest.fixture(scope='function')
def login(request):
    '''登入函式'''
    user = request.param['user']
    password = request.param['password']
    print('使用者名稱:%s' % user)
    print('密碼:%s' % password)
    return 'hello'
 
login_data = [{'user': 'admin', 'password': '123456'}, {'user': 'admin', 'password': '1'}]
 
# 裝飾器
@pytest.mark.parametrize('login',  login_data, indirect=True)
def test_login(login):
    '''登入測試用例'''
    result = login
    assert result == 'hello'
 
if __name__ == '__main__':
    pytest.main('-s', 'day0110_fixture.py')
'''
執行結果:
============================= test session starts =============================
platform win32 -- Python 3.6.6, pytest-4.5.0, py-1.8.0, pluggy-0.13.1
rootdir: F:\python work\youyou_class\study_pytestcollected 2 items
 
day0110_fixture.py 使用者名稱:admin
密碼:123456
.使用者名稱:admin
密碼:1
.                                                    [100%]
 
========================== 2 passed in 0.02 seconds ===========================
 
'''

到此這篇關於pytest介面測試之fixture傳引數request的使用的文章就介紹到這了

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2791552/,如需轉載,請註明出處,否則將追究法律責任。

相關文章