既然fixtures函數(shù)也是咱們自己寫的,那難免會發(fā)生異常,當(dāng)fixture函數(shù)異常后,pytest中如何處理呢?
首先,在pytest中,如果一個(gè)測試函數(shù)中傳入了多個(gè)fixture函數(shù),那么pytest會盡可能的按線性順序先后執(zhí)行。
如果,先執(zhí)行的fixture函數(shù)有問題引發(fā)了異常,那么pytest將會停止執(zhí)行這個(gè)測試函數(shù)的fixture,并且標(biāo)記此測試函數(shù)有錯(cuò)誤。
但是,當(dāng)測試被標(biāo)記為有錯(cuò)誤時(shí),并不是說這個(gè)測試函數(shù)的結(jié)果失敗了,這僅僅意味著測試函數(shù)所依賴的fixture有問題,
導(dǎo)致測試函數(shù)不能正常進(jìn)行。
所以,這就引出了另一個(gè)值得關(guān)注的點(diǎn):fixture雖靈活好用,切記不要濫用。
在實(shí)際應(yīng)用中,要盡可能的減少不必要的依賴關(guān)系。這樣的話,測試函數(shù)就不會因?yàn)槠渌幌嚓P(guān)的問題,導(dǎo)致自己不能正常運(yùn)行。
結(jié)合代碼示例,進(jìn)一步了解:
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]
首先聲明,這段代碼是可以正常運(yùn)行的,測試函數(shù)test_order 也是正常通過的。
假設(shè),不管怎樣,在order.append(1) 處總會報(bào)錯(cuò)。這時(shí)候,我們其實(shí)無法確定order.extend([2]) 或order +=[3]
是否也有問題。
在append_first 報(bào)錯(cuò)拋出異常后,pytest就不會繼續(xù)運(yùn)行任何的fixture函數(shù)了,就連測試函數(shù)test_order 本身也不會運(yùn)行。
|