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出現重名。就近原則,優先使用自己文件下的,其次找父目錄下的共享文件中的即同一爸爸的,其次才會去爺爺那去找。.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM