1. 程式人生 > 實用技巧 >pytest- fixture個人理解總結

pytest- fixture個人理解總結

pytest fixture超級靈活 缺乏百度文件學習,很多騷操作(繼承、共享……),面試也愛問,多看多寫。

前後置條件公式:

@pytest.fixture #無參則預設為函式級別,可帶引數 加上:(scope=”class”/”module”/”session”, auto=True)

Def fun1():

前置條件執行體

Yield 返回值

後置條件執行體

#用例方法要呼叫前後置條件時:

@pytest.mark.usefixtures(“fun1”)

def test_add(self, fun1):

#要用前置條件函式中返回值時,此處用例方法才需傳參,引數名一定同fixture函式名

XXX

XXX

Fixture騷操作---fixture的繼承

如下圖程式碼,init_driver 是 login_web的 一部分,兩個都是函式級別的前後置條件,可以使用繼承來優化Login_web。
自己理解:此處繼承其實更像呼叫,先執行別人的程式碼,再執行自己的程式碼,如果要用到別人的返回值,仍用別人的函式名接收返回值直接使用。
繼承了其他的前後置,其實是先執行一遍其它前後置函式中的語句。所以說省程式碼!

使用繼承後 login_web函式改為如下:

# 訪問網站並且登陸成功
@pytest.fixture

def login_web(init_driver):#login_web函式繼承了init函式,或者叫呼叫了init函式,因為執行login_web時會先執行下init函式
# login_web 呼叫了init—_web(就像用例方法呼叫前置條件一樣來呼叫,直接加前置條件的函式名),並用init_driver接收了它的返回值
LoginPage(init_driver).login(CD.user, CD.passwd)#init的返回值是driver,所以driver都換成了init
yield init_driver

fixture騷操作--全域性共享conftest.py

使用pytest時,如果多處測試用例想共享一個前置、後置條件,則把fixture寫在一個叫conftest.py的檔案中。


1.固定名字,因為pytest有個機制會自動去conftest.py中搜索fixture, 而在用例檔案當中,也不需要去引入conftest.py

2.作用域:當前conftest檔案所在目錄及N級子目錄下的用例,均可直接呼叫此檔案當中的 fixtures.

3.如果fixture出現重名。就近原則,優先使用自己檔案下的,其次找父目錄下的共享檔案中的即同一爸爸的,其次才會去爺爺那去找。.