pytest -fixture的3種用法(autouse=True)
阿新 • • 發佈:2020-06-29
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"])