电竞比分网-中国电竞赛事及体育赛事平台

分享

【pytest官方文檔】解讀fixtures - 6. Fixture errors,當(dāng)fixtures拋錯(cuò)后

 頭號(hào)碼甲 2022-08-06 發(fā)布于北京

既然fixtures函數(shù)也是咱們自己寫(xiě)的,那難免會(huì)發(fā)生異常,當(dāng)fixture函數(shù)異常后,pytest中如何處理呢?

首先,在pytest中,如果一個(gè)測(cè)試函數(shù)中傳入了多個(gè)fixture函數(shù),那么pytest會(huì)盡可能的按線(xiàn)性順序先后執(zhí)行。
如果,先執(zhí)行的fixture函數(shù)有問(wèn)題引發(fā)了異常,那么pytest將會(huì)停止執(zhí)行這個(gè)測(cè)試函數(shù)的fixture,并且標(biāo)記此測(cè)試函數(shù)有錯(cuò)誤。

但是,當(dāng)測(cè)試被標(biāo)記為有錯(cuò)誤時(shí),并不是說(shuō)這個(gè)測(cè)試函數(shù)的結(jié)果失敗了,這僅僅意味著測(cè)試函數(shù)所依賴(lài)的fixture有問(wèn)題,
導(dǎo)致測(cè)試函數(shù)不能正常進(jìn)行。

所以,這就引出了另一個(gè)值得關(guān)注的點(diǎn):fixture雖靈活好用,切記不要濫用。

在實(shí)際應(yīng)用中,要盡可能的減少不必要的依賴(lài)關(guān)系。這樣的話(huà),測(cè)試函數(shù)就不會(huì)因?yàn)槠渌幌嚓P(guān)的問(wè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)行的,測(cè)試函數(shù)test_order也是正常通過(guò)的。

假設(shè),不管怎樣,在order.append(1)處總會(huì)報(bào)錯(cuò)。這時(shí)候,我們其實(shí)無(wú)法確定order.extend([2])order +=[3]
是否也有問(wèn)題。

append_first報(bào)錯(cuò)拋出異常后,pytest就不會(huì)繼續(xù)運(yùn)行任何的fixture函數(shù)了,就連測(cè)試函數(shù)test_order本身也不會(huì)運(yùn)行。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多