既然fixtures函式也是咱們自己寫的,那難免會發生例外,當fixture函式例外后,pytest中如何處理呢?
首先,在pytest中,如果一個測驗函式中傳入了多個fixture函式,那么pytest會盡可能的按線性順序先后執行,
如果,先執行的fixture函式有問題引發了例外,那么pytest將會停止執行這個測驗函式的fixture,并且標記此測驗函式有錯誤,
但是,當測驗被標記為有錯誤時,并不是說這個測驗函式的結果失敗了,這僅僅意味著測驗函式所依賴的fixture有問題,
導致測驗函式不能正常進行,
所以,這就引出了另一個值得關注的點:fixture雖靈活好用,切記不要濫用,
在實際應用中,要盡可能的減少不必要的依賴關系,這樣的話,測驗函式就不會因為其他不相關的問題,導致自己不能正常運行,
結合代碼示例,進一步了解:
import pytest
@pytest.fixture
def order():
return []
@pytest.fixture
def append_first(order):
order.append(1)
@pytest.fixture
def append_second(order, append_first):
order.extend([2])
@pytest.fixture(autouse=True)
def append_third(order, append_second):
order += [3]
def test_order(order):
assert order == [1, 2, 3]
首先宣告,這段代碼是可以正常運行的,測驗函式test_order也是正常通過的,
假設,不管怎樣,在order.append(1)處總會報錯,這時候,我們其實無法確定order.extend([2])或order +=[3]
是否也有問題,
在append_first報錯拋出例外后,pytest就不會繼續運行任何的fixture函式了,就連測驗函式test_order本身也不會運行,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/266247.html
標籤:其他
