1. 程式人生 > 其它 >pytest教程(二)---fixture裝飾器

pytest教程(二)---fixture裝飾器

技術標籤:pytest測試

一、fixture的定義方法

把一個函式定義為fixture很簡單,只需要在函式宣告之前加上“@pytest.fixture”,引數如下:fixture(scope="function", params=None, autouse=False, ids=None, name=None):

1、scope:有四個級別引數 "function" (預設), "class", "module" or "session":

☆ session多個檔案呼叫一次,可以跨.py檔案呼叫

☆ module每個.py檔案呼叫一次

☆ class每個類呼叫一次

☆ function每個函式或方法都會呼叫

2、params: 一個可選的引數列表,預設為None。當它不為None時,params裡面的每個值,fixture都會去呼叫執行一次,就像執行for迴圈一樣把params裡的值遍歷一次;

3、autouse: 當預設為False,就可以選擇另外兩種方式來呼叫fixture。當設定為True時,在一個session內的所有的測試用例都會自動呼叫這個fixture;

4、ids: 每個字串id的列表,每個字串對應於params 這樣他們就是測試ID的一部分。 如果沒有提供ID它們將從params自動生成;

5、name: fixture的名稱,代表裝飾函式的名稱。

二、fixture的呼叫方法

fixture函式定義完成之後,如果想在測試用例中呼叫它,呼叫方式有三種:

☆ 直接呼叫;

☆ 使用fixture呼叫,在測試用例前加上“@pytest.mark.usefixtures(“名”)”;

☆ 使用fixture的autouse引數來呼叫,將autose引數置為True,則該session下的所有用例都會自動呼叫它。

三、fixture的返回值

fixture可以返回一個值、一個元組、list或字典。

四、conftest.py

如果多個用例需要呼叫同一個功能。我們可以將fixture寫入conftest.py 配置檔案裡實現資料共享,同時又方便統一管理這些公共的功能。

conftest.py配置需要注意以下幾點:

☆ conftest.py配置指令碼名稱是固定的,不能改名稱;

☆ conftest.py與執行的用例要在同一個目錄下,並且有__init__.py檔案;

☆ 不需要import匯入 conftest.py,用例會自動查詢。

五、例項

conftest.py以及test_fixture.py放在同一目錄下,test_fixture.py即為測試用例:

conftest.py內容如下:

import pytest

@pytest.fixture()
def user():
    print("獲取使用者名稱")
    a = "hillwill"
    b = "wxt"
    return (a,b)

test_fixture.py內容如下:

import pytest

def test_1(user):
    user1 = user[0]
    print("使用者名稱1:%s" % user1)
    assert user1 == "hillwill"

def test_2(user):
    user2 = user[1]
    print("使用者名稱2:%s" % user2)
    assert user1 == "wxt"

if __name__ == "__main__":

    pytest.main(["-s", "test_fixture.py"])