python pytest進(jìn)階之xunit fixture詳解
前言
今天我們?cè)僬f(shuō)一下pytest框架和unittest框架相同的fixture的使用, 了解unittest的同學(xué)應(yīng)該知道我們?cè)诔跏蓟h(huán)境和銷毀工作時(shí),unittest使用的是setUp,tearDown方法,那么在pytest框架中同樣存在類似的方法,今天我們就來(lái)具體說(shuō)明。
先附上官方文檔的一段說(shuō)明
1.每個(gè)級(jí)別的setup/teardown都可以多次復(fù)用
2.如果相應(yīng)的初始化函數(shù)執(zhí)行失敗或者被跳過(guò)則不會(huì)執(zhí)行teardown方法
3.在pytest4.2之前,xunit fixture 不遵循fixture的作用規(guī)則的,因此可以在一個(gè)session級(jí)別且參數(shù)auto=True的fixture前執(zhí)行setup_method方法
但是到目前為止,所有的xunit fixture已經(jīng)遵循了fixture執(zhí)行的規(guī)則
function級(jí)別
實(shí)例
def setup_function(function): print('\n--------------------') print('函數(shù)執(zhí)行前所做的操作') print('\n--------------------') def teardown_function(function): print('\n--------------------') print('函數(shù)執(zhí)行后所做的操作') print('\n--------------------') def test_function_1(): print('\n測(cè)試函數(shù)1') def test_function_2(): print('\n測(cè)試函數(shù)2') if __name__ == '__main__': import pytest pytest.main(['-sq', 'functionLevel.py'])
輸出結(jié)果
functionLevel.py -------------------- 函數(shù)執(zhí)行前所做的操作 -------------------- 測(cè)試函數(shù)1 -------------------- 函數(shù)執(zhí)行后所做的操作 -------------------- -------------------- 函數(shù)執(zhí)行前所做的操作 -------------------- 測(cè)試函數(shù)2 -------------------- 函數(shù)執(zhí)行后所做的操作 -------------------- [100%] ========================== 2 passed in 0.03 seconds ===========================
說(shuō)明
通過(guò)輸出結(jié)果我們可以總結(jié):setup_function會(huì)在每一個(gè)測(cè)試函數(shù)前執(zhí)行初始化操作;teardown_function會(huì)在每一個(gè)測(cè)試函數(shù)執(zhí)行后執(zhí)行銷毀工作
method級(jí)別
實(shí)例
class TestMethod(object): def setup_method(self, method): print('\n--------------------') print('方法執(zhí)行前所做的操作') print('\n--------------------') def teardown_method(self, method): print('\n--------------------') print('方法執(zhí)行后所做的操作') print('\n--------------------') def test_method_1(self): print('\n測(cè)試方法1') def test_method_2(self): print('\n測(cè)試方法2') if __name__ == '__main__': import pytest pytest.main(['-sq', 'methodLevel.py'])
輸出結(jié)果
methodLevel.py -------------------- 方法執(zhí)行前所做的操作 -------------------- 測(cè)試方法1 -------------------- 方法執(zhí)行后所做的操作 -------------------- -------------------- 方法執(zhí)行前所做的操作 -------------------- 測(cè)試方法2 -------------------- 方法執(zhí)行后所做的操作 -------------------- [100%] ========================== 2 passed in 0.03 seconds ===========================
說(shuō)明
通過(guò)輸出結(jié)果我們可以總結(jié):setup_method會(huì)在每一個(gè)測(cè)試方法前執(zhí)行初始化操作;teardown_method會(huì)在每一個(gè)測(cè)試方法執(zhí)行后執(zhí)行銷毀工作,且方法級(jí)別的fixture是作用在測(cè)試類中的方法上的
class級(jí)別
實(shí)例
class TestClass(object): @classmethod def setup_class(cls): print('\nsetup_class() for {}'.format(cls.__name__)) @classmethod def teardown_class(cls): print('\nteardown_class() for {}'.format(cls.__name__)) def test_1(self): print('self.test_1()') def test_2(self): print('self.test_2()') if __name__ == '__main__': import pytest pytest.main(['-sq', 'classLevel.py'])
輸出結(jié)果
classLevel.py setup_class() for TestClass .self.test_1() .self.test_2() teardown_class() for TestClass [100%] ========================== 2 passed in 0.06 seconds ===========================
說(shuō)明
通過(guò)輸出結(jié)果我們可以總結(jié):setup_class會(huì)在測(cè)試類執(zhí)行前執(zhí)行一次初始化操作;teardown_class會(huì)在測(cè)試類執(zhí)行后執(zhí)行一次銷毀工作,且class級(jí)別的fixture需要使用@classmethod裝飾
module級(jí)別
實(shí)例
def setup_module(module): print('\nsetup_module() for {}'.format(module.__name__)) def teardown_module(module): print('\nteardown_module() for {}'.format(module.__name__)) def test_1(): print('test_1()') def test_2(): print('test_2()') class TestClass(object): def test_3(self): print('self.test_3()') def test_4(self): print('self.test_4()') if __name__ == '__main__': import pytest pytest.main(['-sq', 'moduleLevel.py'])
輸出結(jié)果
moduleLevel.py setup_module() for moduleLevel .test_1() .test_2() .self.test_3() .self.test_4() teardown_module() for moduleLevel [100%] ========================== 4 passed in 0.04 seconds ===========================
說(shuō)明
通過(guò)輸出結(jié)果我們可以總結(jié):setup_module會(huì)在整個(gè)測(cè)試文件也就是模塊中的測(cè)試類或者測(cè)試函數(shù),測(cè)試方法執(zhí)行前執(zhí)行一次初始化操作;teardown_module會(huì)在整個(gè)測(cè)試文件也就是模塊中的測(cè)試類或者測(cè)試函數(shù),方法執(zhí)行后執(zhí)行一次銷毀工作
以上就是xunit fixture的4個(gè)級(jí)別,實(shí)際工作中該如何使用還需多練習(xí),深入理解才能得心應(yīng)手!
附上官方文檔做參考雖是英文但是很詳細(xì)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- pytest官方文檔解讀fixtures的調(diào)用方式
- pytest官方文檔解讀fixtures
- pytest解讀fixture有效性及跨文件共享fixtures
- pytest?fixtures函數(shù)及測(cè)試函數(shù)的參數(shù)化解讀
- 分享Pytest fixture參數(shù)傳遞的幾種方式
- pytest自動(dòng)化測(cè)試中的fixture的聲明和調(diào)用
- pytest框架之fixture詳細(xì)使用詳解
- pytest進(jìn)階教程之fixture函數(shù)詳解
- Pytest框架之fixture的詳細(xì)使用教程
- python pytest進(jìn)階之fixture詳解
- Pytest框架之fixture詳解(一)
相關(guān)文章
Python logging模塊異步線程寫日志實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Python logging模塊異步線程寫日志實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06flask后端request獲取參數(shù)的幾種方式整理
這篇文章主要為大家介紹了flask后端request獲取參數(shù)的幾種方式整理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Python實(shí)現(xiàn)遍歷大量表格文件并篩選出數(shù)據(jù)缺失率低的文件
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)遍歷大量表格文件并篩選出表格內(nèi)數(shù)據(jù)缺失率低的文件的功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-05-05python3安裝pip3(install pip3 for python 3.x)
這篇文章主要為大家詳細(xì)介紹了install pip3 for python 3.x,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04對(duì)numpy中數(shù)組元素的統(tǒng)一賦值實(shí)例
下面小編就為大家分享一篇對(duì)numpy中數(shù)組元素的統(tǒng)一賦值實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04使用python連接Linux服務(wù)器發(fā)送指定命令的示例代碼
這篇文章主要介紹了使用python連接Linux服務(wù)器發(fā)送指定命令,首先安裝paramiko庫(kù),使用paramiko庫(kù)連接linux,使用paramiko庫(kù)上傳下載文件,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10python 含子圖的gif生成時(shí)內(nèi)存溢出的方法
今天小編就為大家分享一篇python 含子圖的gif生成時(shí)內(nèi)存溢出的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07