pytest- fixture個人理解總結
阿新 • • 發佈:2020-08-12
pytest fixture超級靈活 缺乏百度文件學習,很多騷操作(繼承、共享……),面試也愛問,多看多寫。
前後置條件公式:
@pytest.fixture #無參則預設為函式級別,可帶引數 加上:(scope=”class”/”module”/”session”, auto=True)
Def fun1():
前置條件執行體
Yield 返回值
後置條件執行體
#用例方法要呼叫前後置條件時:
@pytest.mark.usefixtures(“fun1”)
def test_add(self, fun1):
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出現重名。就近原則,優先使用自己檔案下的,其次找父目錄下的共享檔案中的即同一爸爸的,其次才會去爺爺那去找。.