溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

python中pytest進(jìn)階之xunit fixture的示例分析

發(fā)布時(shí)間:2021-08-12 14:15:15 來(lái)源:億速云 閱讀:154 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要為大家展示了“python中pytest進(jìn)階之xunit fixture的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“python中pytest進(jìn)階之xunit fixture的示例分析”這篇文章吧。

前言

先附上官方文檔的一段說(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í)行銷(xiāo)毀工作

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í)行銷(xiāo)毀工作,且方法級(jí)別的fixture是作用在測(cè)試類(lèi)中的方法上的

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è)試類(lèi)執(zhí)行前執(zhí)行一次初始化操作;teardown_class會(huì)在測(cè)試類(lèi)執(zhí)行后執(zhí)行一次銷(xiāo)毀工作,且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è)試類(lèi)或者測(cè)試函數(shù),測(cè)試方法執(zhí)行前執(zhí)行一次初始化操作;teardown_module會(huì)在整個(gè)測(cè)試文件也就是模塊中的測(cè)試類(lèi)或者測(cè)試函數(shù),方法執(zhí)行后執(zhí)行一次銷(xiāo)毀工作

以上是“python中pytest進(jìn)階之xunit fixture的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI