2017-07-25 43 views
1

失敗比方說,我有一個測試,如下圖所示:如何忽略測試時,會話支架,pytest

import pytest 
import copy 

@pytest.fixture(scope='session') 
def session_tool(request): 
    tool = request.config.tool 
    # Build is the critical part and may fail, raising an exception 
    tool.build() 
    return tool 

@pytest.fixture 
def tool(session_tool): 
    return copy.deepcopy(session_tool) 

def test_tool(tool, args): 
    assert tool.run(args) == 0 

它建立一個session範圍的工具,然後爲每個測試用例創建一個副本。但是當構建失敗時,session_tool夾具再次被執行用於下一個測試用例,該測試用例再次失敗......直到所有測試用例都失敗。由於有很多測試案例,所以在完成過程之前需要一些時間。

有沒有什麼辦法可以告訴pytest在第一次構建失敗後跳過所有使用session_fixture的測試?

回答

0

我能想到的兩種方法:

1)調用pytest.skip()會導致測試被跳過。這也適用於從夾具中調用它的情況。在你的情況下,它會導致所有剩餘的測試被跳過。

2)調用pytest.exit()將導致您的測試套件停止運行,就像KeyboardInterrupt被觸發一樣。

+0

我知道'skip'和'exit'函數,但這不是我想要實現的。我的目標是徹底跳過測試,這意味着夾具不會再次被調用。 –

+0

您的目標是專門跳過夾具的調用嗎?你可以通過實現自定義鉤子來完成你所描述的內容,例如也許集合掛鉤將得到你所追求的:https://docs.pytest.org/en/latest/writing_plugins.html#collection-hooks 但是,在我看來,這會變得更加困難。如果我是你,我會將構建塊包裝在一個異常處理程序中,如果它爆炸,則設置一些相對全局的標誌,並且如果設置了該標誌,則將該設備短路。 –