pytest教程(二)---fixture裝飾器
一、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"])