一沧烈、’conftest特點:
1缚窿、可以跨.py文件調(diào)用休建,有多個.py文件調(diào)用時岗屏,可讓conftest.py只調(diào)用了一次fixture,或調(diào)用多次fixture
2冻晤、conftest.py與運行的用例要在同一個pakage下苇羡,并且有init.py文件
3、不需要import導(dǎo)入 conftest.py鼻弧,pytest用例會自動識別該文件设江,放到項目的根目錄下就可以全局目錄調(diào)用了,如果放到某個package下攘轩,那就在改package內(nèi)有效叉存,可有多個conftest.py
4、conftest.py配置腳本名稱是固定的度帮,不能改名稱
5鹉胖、conftest.py文件不能被其他文件導(dǎo)入
6、所有同目錄測試文件運行前都會執(zhí)行conftest.py文件
二、’conftest用法:
conftest文件實際應(yīng)用需要結(jié)合fixture來使用甫菠,fixture中參數(shù)scope也適用conftest中fixture的特性挠铲,這里再說明一下
1、fixture源碼詳解
1.fixture(scope='function'寂诱,params=None拂苹,autouse=False,ids=None痰洒,name=None):
fixture里面有個scope參數(shù)可以控制fixture的作用范圍瓢棒,scope:有四個級別參數(shù)"function"(默認(rèn)),"class"丘喻,"module"脯宿,"session
2.params:一個可選的參數(shù)列表,它將導(dǎo)致多個參數(shù)調(diào)用fixture功能和所有測試使用它泉粉。
3.autouse:如果True连霉,則為所有測試激活fixture func可以看到它。如果為False則顯示需要參考來激活fixture
4.ids:每個字符串id的列表嗡靡,每個字符串對應(yīng)于params這樣他們就是測試ID的一部分跺撼。如果沒有提供ID它們將從params自動生成
5.name:fixture的名稱。這默認(rèn)為裝飾函數(shù)的名稱讨彼。如果fixture在定義它的統(tǒng)一模塊中使用歉井,夾具的功能名稱將被請求夾具的功能arg遮蔽,解決這個問題的一種方法時將裝飾函數(shù)命令"fixture_<fixturename>"然后使用"@pytest.fixture(name='<fixturename>')"哈误。
2哩至、fixture的作用范圍
fixture里面有個scope參數(shù)可以控制fixture的作用范圍:session>module>class>function
-function:每一個函數(shù)或方法都會調(diào)用
-class:每一個類調(diào)用一次,一個類中可以有多個方法
-module:每一個.py文件調(diào)用一次蜜自,該文件內(nèi)又有多個function和class
-session:是多個文件調(diào)用一次菩貌,可以跨.py文件調(diào)用,每個.py文件就是module
function默認(rèn)模式@pytest.fixture(scope='function')或 @pytest.fixture()
3袁辈、conftest結(jié)合fixture的使用
conftest中fixture的scope參數(shù)為session菜谣,所有測試.py文件執(zhí)行前執(zhí)行一次
conftest中fixture的scope參數(shù)為module珠漂,每一個測試.py文件執(zhí)行前都會執(zhí)行一次conftest文件中的fixture
conftest中fixture的scope參數(shù)為class晚缩,每一個測試文件中的測試類執(zhí)行前都會執(zhí)行一次conftest文件中的fixture
conftest中fixture的scope參數(shù)為function,所有文件的測試用例執(zhí)行前都會執(zhí)行一次conftest文件中的fixture
三媳危、conftest應(yīng)用場景
1荞彼、每個接口需共用到的token
2、每個接口需共用到的測試用例數(shù)據(jù)
3待笑、每個接口需共用到的配置信息
# 實現(xiàn)部分前置
import pytest
from comment.yaml_unit import YamlUnit
@pytest.fixture(scope="function")
def conn_getbase():
print("連接數(shù)據(jù)庫成功")
yield
print("關(guān)閉數(shù)據(jù)庫成功")
@pytest.fixture(scope="session", autouse=True)
def clear_yaml():
YamlUnit().deleteYaml()