前言
今天我們再說一下pytest框架和unittest框架相同的fixture的使用, 了解unittest的同學(xué)應(yīng)該知道我們在初始化環(huán)境和銷毀工作時,unittest使用的是setUp,tearDown方法,那么在pytest框架中同樣存在類似的方法,今天我們就來具體說明。
先附上官方文檔的一段說明
1.每個級別的setup/teardown都可以多次復(fù)用
2.如果相應(yīng)的初始化函數(shù)執(zhí)行失敗或者被跳過則不會執(zhí)行teardown方法
3.在pytest4.2之前,xunit fixture 不遵循fixture的作用規(guī)則的,因此可以在一個session級別且參數(shù)auto=True的fixture前執(zhí)行setup_method方法
但是到目前為止,所有的xunit fixture已經(jīng)遵循了fixture執(zhí)行的規(guī)則
function級別
實(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測試函數(shù)1') def test_function_2(): print('\n測試函數(shù)2') if __name__ == '__main__': import pytest pytest.main(['-sq', 'functionLevel.py'])
輸出結(jié)果
functionLevel.py -------------------- 函數(shù)執(zhí)行前所做的操作 -------------------- 測試函數(shù)1 -------------------- 函數(shù)執(zhí)行后所做的操作 -------------------- -------------------- 函數(shù)執(zhí)行前所做的操作 -------------------- 測試函數(shù)2 -------------------- 函數(shù)執(zhí)行后所做的操作 -------------------- [100%] ========================== 2 passed in 0.03 seconds ===========================
說明
通過輸出結(jié)果我們可以總結(jié):setup_function會在每一個測試函數(shù)前執(zhí)行初始化操作;teardown_function會在每一個測試函數(shù)執(zhí)行后執(zhí)行銷毀工作
method級別
實(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測試方法1') def test_method_2(self): print('\n測試方法2') if __name__ == '__main__': import pytest pytest.main(['-sq', 'methodLevel.py'])
輸出結(jié)果
methodLevel.py -------------------- 方法執(zhí)行前所做的操作 -------------------- 測試方法1 -------------------- 方法執(zhí)行后所做的操作 -------------------- -------------------- 方法執(zhí)行前所做的操作 -------------------- 測試方法2 -------------------- 方法執(zhí)行后所做的操作 -------------------- [100%] ========================== 2 passed in 0.03 seconds ===========================
說明
通過輸出結(jié)果我們可以總結(jié):setup_method會在每一個測試方法前執(zhí)行初始化操作;teardown_method會在每一個測試方法執(zhí)行后執(zhí)行銷毀工作,且方法級別的fixture是作用在測試類中的方法上的
class級別
實(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 ===========================
說明
通過輸出結(jié)果我們可以總結(jié):setup_class會在測試類執(zhí)行前執(zhí)行一次初始化操作;teardown_class會在測試類執(zhí)行后執(zhí)行一次銷毀工作,且class級別的fixture需要使用@classmethod裝飾
module級別
實(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 ===========================
說明
通過輸出結(jié)果我們可以總結(jié):setup_module會在整個測試文件也就是模塊中的測試類或者測試函數(shù),測試方法執(zhí)行前執(zhí)行一次初始化操作;teardown_module會在整個測試文件也就是模塊中的測試類或者測試函數(shù),方法執(zhí)行后執(zhí)行一次銷毀工作
以上就是xunit fixture的4個級別,實(shí)際工作中該如何使用還需多練習(xí),深入理解才能得心應(yīng)手!
附上官方文檔做參考雖是英文但是很詳細(xì)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
