Pytest框架 conftest.py文件的使用詳解
conftest.py文件特點
- 所有同目錄測試文件運行前都會執(zhí)行conftest.py文件 不需要import導(dǎo)入
- conftest.py,pytest用例會自動識別該文件,放到項目的根目錄下就可以全局目錄調(diào)用了,如果放到某個package下,那就在該package內(nèi)有效,可有多個conftest.py
- conftest.py與運行的用例要在同一個pakage下,并且有__init__.py文件
- 可以跨.py文件調(diào)用,有多個.py文件調(diào)用時,可讓conftest.py只調(diào)用了一次fixture,或調(diào)用多次fixture
1、conftest.py文件介紹
conftest.py文件是Pytest框架里面一個很重要的東西,它可以在這個文件里面編寫Fixture函數(shù),這個Fixture函數(shù)的作用,就相當(dāng)于Unittest框架里面的setup()前置函數(shù)和teardown()后置函數(shù),雖然Pytest框架也有setup()前置函數(shù)和teardown()后置函數(shù),但是在實際工作中沒必要寫在測試用例文件中,直接寫在conftests.py里面就好了,Pytest框架會自動去找conftest.py文件里面的東西,這樣更靈活。
總結(jié):在實際工作中,通常conftest.py和@pytest.fixture()結(jié)合使用,實現(xiàn)全局的前后置應(yīng)用。
2、conftest.py的注意事項
conftest.py文件是單獨存放的一個夾具(Fixture)配置文件,名稱是不能更改。- 可以在不同的
.py文件中使用同一個Fixture函數(shù)。 - 原則上
conftest.py需要和運行的用例放到同一目錄中,并且有__init__.py文件,那么conftest.py作用于整個目錄。 - 如果希望Fixture(夾具)共享給所有測試,則可以把
conftest.py文件放在測試框架的根目錄下。 conftest.py文件中的內(nèi)容,不需要做任何的imprt導(dǎo)入的操作就能夠讀取到,因為Pytest用例會自動查找。- 建議把測試項目的所有Fixture都存放在
conftest.py文件中,把conftest.py當(dāng)作Pytest的Fixture倉庫。
3、conftest.py的使用
(1)測試框架的根目錄或者包中創(chuàng)建conftest.py文件
"""
1.學(xué)習(xí)目標(biāo)
掌握conftest.py文件編寫格式
2.操作步驟
2.1 conftest.py文件名不能修改
conftest.py文件中存放項目所有的fixture
方便對fixture管理和維護(hù)
2.2 在conftest.py定義函數(shù)
在函數(shù)前添加@pytest.fixture()裝飾器
在測試用例的函數(shù)中傳入fixture標(biāo)識的函數(shù)名。
提示:conftest.py文件放在項目的根目錄,作用域是全局的。
conftest.py文件放在某一個包下,作用域只在該包內(nèi)。
"""
import pytest
from selenium import webdriver
@pytest.fixture()
def login():
print("打開APP")
print("登錄成功")
yield # 當(dāng)用例執(zhí)行完成后,執(zhí)行yield后的代碼
print("關(guān)閉APP")
@pytest.fixture()
def driver(request): # request是Pytest中的一個關(guān)鍵字,固定寫法。
# 步驟1:創(chuàng)建瀏覽器驅(qū)動對象
driver = webdriver.Chrome()
# 步驟3:定義用例執(zhí)行后要執(zhí)行的代碼,封裝到一個函數(shù)中
def end(): # 這個end函數(shù)命是自定義的
driver.quit()
# 步驟4:執(zhí)行上面封裝的代碼。
# 通過request關(guān)鍵字,結(jié)束上面的函數(shù)。
request.addfinalizer(end) # 終結(jié)函數(shù)
# 步驟2:返回瀏覽器驅(qū)動對象,給測試用例
return driver(2)測試用例文件如下
import pytest
# 注意:要把conftest.py文件中定義的fixture方法添加到用例中
def test_add_cart(login): # 把conftest.py文件中的fixture函數(shù)傳入用例
print("添加購物車--需要登錄")
def test_add_address(login):
print("添加收貨地址--需要登錄")
if __name__ == '__main__':
pytest.main()
"""
執(zhí)行結(jié)果:
test_01.py::test_add_cart 打開APP
登錄成功
添加購物車--需要登錄
PASSED關(guān)閉APP
test_01.py::test_add_address 打開APP
登錄成功
添加收貨地址--需要登錄
PASSED關(guān)閉APP
"""4、不同位置conftest.py文件的優(yōu)先級
其作用范圍是當(dāng)前目錄包括子目錄里的測試模塊。
- 比如在測試框架的根目錄創(chuàng)建
conftest.py文件,文件中的Fixture的作用范圍是所有測試模塊。 - 比如在某個單獨的測試文件夾里創(chuàng)建
conftest.py文件,文件中Fixture的作用范圍,就僅局限于該測試文件夾里的測試模塊。 - 該測試文件夾外的測試模塊,或者該測試文件夾外的測試文件夾,是無法調(diào)用到這個
conftest.py文件中的Fixture。 - 如果測試框架的根目錄和子包中都有
conftest.py文件,并且這兩個conftest.py文件中都有一個同名的Fixture,實際生效的是測試框架中子包目錄下的conftest.py文件中配置的Fixture。 - 提示:一個用例可以添加多個
conftest.py文件中定義的Fixture夾具,如下:
# 注意:要把conftest.py文件中定義的fixture方法添加到用例中
def test_add_cart(login, driver):
print("添加購物車--需要登錄")5、conftest.py中Fixture(夾具)的作用域
Fixture的scope參數(shù)也適用conftest.py文件中Fixture的特性:
conftest.py文件中Fixture的scope參數(shù)為session,那么所有的測試文件執(zhí)行前(后)執(zhí)行一次conftest.py文件中的Fixture。conftest.py文件中Fixture的scope參數(shù)為module,那么每一個測試文件執(zhí)行前(后)都會執(zhí)行一次conftest.py文件中Fixture。conftest.py文件中Fixture的scope參數(shù)為class,那么每一個測試文件中的測試類執(zhí)行前(后)都會執(zhí)行一次conftest.py文件中Fixture。conftest.py文件中Fixture的scope參數(shù)為function,那么所有文件的測試用例執(zhí)行前(后)都會執(zhí)行一次conftest.py文件中Fixture。
6、總結(jié):
- Pytest框架中的
setup()/teardown()函數(shù),setup_class()/teardown_class()函數(shù)。他們是作用于所有用例或者所有類的。 @pytest.fixtrue()的作用域是既可以部分用例,也可以全部用例的前后置。conftest.py文件和@pytest.fxtrue()裝飾器結(jié)合使用,作用于全局用例的前后置。
到此這篇關(guān)于Pytest框架 conftest.py文件的使用詳解的文章就介紹到這了,更多相關(guān)Pytest conftest.py文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python機器學(xué)習(xí)之K-Means聚類實現(xiàn)詳解
這篇文章主要為大家詳細(xì)介紹了Python機器學(xué)習(xí)之K-Means聚類的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-02-02
Python+selenium 獲取瀏覽器窗口坐標(biāo)、句柄的方法
今天小編就為大家分享一篇Python+selenium 獲取瀏覽器窗口坐標(biāo)、句柄的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10
解決Python?Pandas?DataFrame表格打印輸出不能對齊的問題
這篇文章主要介紹了解決Python?Pandas?DataFrame表格打印輸出不能對齊的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
Python中的枚舉函數(shù)enumerate()的具體用法
本文主要介紹了Python中的枚舉函數(shù)enumerate()的具體用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
一文詳解Python中的Map,Filter和Reduce函數(shù)
這篇文章主要介紹了一文詳解Python中的Map,Filter和Reduce函數(shù),本文重點介紹Python中的三個特殊函數(shù)Map,Filter和Reduce,以及如何使用它們進(jìn)行代碼編程2022-08-08
Python數(shù)據(jù)處理之臨近匹配的實現(xiàn)詳解
在數(shù)據(jù)處理中,經(jīng)常需要找到最接近給定值的元素或數(shù)據(jù)點,這種需求在科學(xué)、工程和統(tǒng)計分析中非常常見,Python 提供了多種方法來實現(xiàn)這種臨近匹配,下面就跟隨小編一起學(xué)習(xí)一下吧2024-02-02
如何將conda虛擬環(huán)境添加到Jupyter lab內(nèi)核
這篇文章主要介紹了如何將conda虛擬環(huán)境添加到Jupyter lab內(nèi)核問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06

