pytest -fixture的3種用法(autouse=True)


fixture里面有個參數autouse,默認是Fasle沒開啟的,可以設置為True開啟自動使用fixture功能,這樣用例就不用每次都去傳參了

調用fixture三種方法

  • 1.函數或類里面方法直接傳fixture的函數參數名稱
  • 2.使用裝飾器@pytest.mark.usefixtures()修飾
  • 3.autouse=True自動使用   

 

用例傳fixture參數

方法一:先定義start功能,用例全部傳start參數,調用該功能

 

# content of test_06.py
import time
import pytest

 

@pytest.fixture(scope="function")
def start(request):
    print('\n-----開始執行function----')


def test_a(start):
    print("-------用例a執行-------")




class Test_aaa():

    def test_01(self, start):
        print('-----------用例01--------------')

    def test_02(self, start):
        print('-----------用例02------------')

if __name__ == "__main__":
    pytest.main(["-s", "test_06.py"])

 

裝飾器usefixtures

方法二:使用裝飾器@pytest.mark.usefixtures()修飾需要運行的用例

# content of test_07.py
import time
import pytest

 

@pytest.fixture(scope="function")
def start(request):
    print('\n-----開始執行function----')


@pytest.mark.usefixtures("start")
def test_a():
    print("-------用例a執行-------")

@pytest.mark.usefixtures("start")
class Test_aaa():

    def test_01(self):
        print('-----------用例01--------------')

    def test_02(self):
        print('-----------用例02------------')

if __name__ == "__main__":
    pytest.main(["-s", "test_07.py"])

 

設置autouse=True

方法三、autouse設置為True,自動調用fixture功能

  • start設置scope為module級別,在當前.py用例模塊只執行一次,autouse=True自動使用
  • open_home設置scope為function級別,每個用例前都調用一次,自動使用
# content of test_08.py
import time
import pytest
 

@pytest.fixture(scope="module", autouse=True)
def start(request):
    print('\n-----開始執行moule----')
    print('module      : %s' % request.module.__name__)
    print('----------啟動瀏覽器---------')
    yield
    print("------------結束測試 end!-----------")



@pytest.fixture(scope="function", autouse=True)
def open_home(request):
    print("function:%s \n--------回到首頁--------" % request.function.__name__)


def test_01():
    print('-----------用例01--------------')

def test_02():
    print('-----------用例02------------')

if __name__ == "__main__":
    pytest.main(["-s", "test_08.py"])

 

運行結果:

============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0 rootdir: D:\, inifile: plugins: metadata-1.7.0, html-1.19.0, allure-adaptor-1.7.10 collected 2 items ..\..\..\..\..\..\YOYO\peizhi\test_08.py -----開始執行moule---- module : YOYO.peizhi.test_08 ----------啟動瀏覽器--------- function:test_01 --------回到首頁-------- -----------用例01-------------- .function:test_02 --------回到首頁-------- -----------用例02------------ .------------結束測試----------- ========================== 2 passed in 0.01 seconds =========================== 

上面是函數去實現用例,寫的class里也是一樣可以的

# content of test_09.py
import time
import pytest
 

@pytest.fixture(scope="module", autouse=True)
def start(request):
    print('\n-----開始執行moule----')
    print('module      : %s' % request.module.__name__)
    print('----------啟動瀏覽器---------')
    yield
    print("------------結束測試 end!-----------")



class Test_aaa():
    @pytest.fixture(scope="function", autouse=True)
    def open_home(self, request):
        print("function:%s \n--------回到首頁--------" % request.function.__name__)


    def test_01(self):
        print('-----------用例01--------------')

    def test_02(self):
        print('-----------用例02------------')

if __name__ == "__main__":
    pytest.main(["-s", "test_09.py"])

 


免責聲明!

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



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