pytest之conftest
fixture
fixture(scope='function',params=None,autouse=False,ids=None,name=None):
fixture裡面有個scope引數可以控制fixture的作用範圍,scope:有四個級別引數"function"(預設),"class","module","session
params:一個可選的引數列表,它將導致多個引數呼叫fixture功能和所有測試使用它。
autouse:如果True,則為所有測試啟用fixture func可以看到它。如果為False則顯示需要參考來啟用fixture
ids:每個字串id的列表,每個字串對應於params這樣他們就是測試ID的一部分。如果沒有提供ID它們將從params自動生成
name:fixture的名稱。這預設為裝飾函式的名稱。如果fixture在定義它的統一模組中使用,夾具的功能名稱將被請求夾具的功能arg遮蔽,解決這個問題的一種方法時將裝飾函式命令"fixture_<fixturename>"然後使用"@pytest.fixture(name='<fixturename>')"。
1.firture相對於setup和teardown來說應該有以下幾點優勢
scope:有四個級別引數"function"(預設),"class","module","session
- 命名方式靈活,不侷限於setup和teardown這幾個命名
- conftest.py 配置裡可以實現資料共享,不需要import就能自動找到一些配置
- scope="module" 可以實現多個.py跨檔案共享前置, 每一個.py檔案呼叫一次
- scope="session" 以實現多個.py跨檔案使用一個session來完成多個用例
- scope="class":每一個類呼叫一次,一個類中可以有多個方法
- scope="function":每一個函式或方法都會呼叫
2、fixture的作用範圍
fixture裡面有個scope引數可以控制fixture的作用範圍:session>module>class>function
conftest.py配置檔案
單獨管理一些預置的操作場景,pytest預設讀取conftest.py配置檔案
使用場景:
1、每個介面需共用到的token
2、每個介面需共用到的測試用例資料
3、每個介面需共用到的配置資訊
conftest.py結合fixture的 scope使用:
1. scope預設為function
conftest.py
import pytest @pytest.fixture()def login(): print("this is login method")
test_conftest.py
import pytest class TestConftest: def setup_class(self): print('setup class') @pytest.mark.usefixtures('login') def test_one(self): print('test one case') flag = 1 if flag: print('測試111') @pytest.mark.usefixtures('login') def test_two(self): print('test two case') def test_three(self): print('test three case') def teardown_class(self): print('teardown class')View Code
執行結果:
2. scope="class",整個用例只執行一次
conftest.py
import pytest @pytest.fixture(scope="class") def login(): print("this is login method")
test_conftest.py程式碼不改
執行結果: