2013-07-10 94 views
12

我正在使用pytest。我在一個目錄中有兩個文件。在其中一個文件中,有一個長時間運行的測試用例會生成一些輸出。在另一個文件中有一個讀取該輸出的測試用例。我怎樣才能確保兩個測試用例的正確執行順序?除了按照正確的順序將測試用例放在同一個文件中,還有其他的選擇嗎?pytest中的測試用例執行順序

+3

一般來說,讓測試用例相互依賴並不是一個好主意。如果你需要在2個測試用例中使用相同的數據,爲什麼不把它添加到'setup'部分? – Brad

+0

我知道。我也不喜歡它,但現在我需要它。 – Kocka

+1

我不想將它添加到設置部分,因爲它需要大約15-20分鐘。 – Kocka

回答

7

一般來說,您可以使用其well-specified hooks配置pytest的基本任何部分的行爲。

在你的情況下,你需要「pytest_collection_modifyitems」鉤子,它可以讓你重新定購收集的測試。

這就是說,它看起來像命令你的測試應該更容易 - 畢竟這是Python!所以我寫了一個訂購測試的插件。看看docs或從pypi安裝它。現在我建議使用@ pytest.mark.first和@ pytest.mark.second,或者@ pytest.mark.order#標記之一,但我對一些更有用的API有一些想法。建議表示歡迎:)

+0

嘿。感謝您創建此插件。你可以修改它,以便它只是提取尾隨數字作爲順序。例如,如果我說@ pytest.mark.custom1,那麼1應該是順序。這將非常有幫助! –

+0

我可以試試。我認爲v0.2具有「訂單」標記的這種行爲,而不是任意的標記。你可以把它寫成pytest-ordering的github頁面上的一個功能請求嗎? https://github.com/ftobia/pytest-ordering –

+0

鉤子鏈接應該去:http://pytest.org/latest/writing_plugins.html#well-specified-hooks –

1

也許你可以考慮使用dependency pytest插件,在那裏你可以很容易地設置測試的依賴關係:

@pytest.mark.dependency() 
def test_long(): 
    pass 

@pytest.mark.dependency(depends=['test_long']) 
def test_short(): 
    pass 

這樣,如果test_long是成功和力的執行順序test_short將只執行以及。

+0

以上不適用於訂單排序。例如:如果您翻轉訂單。即長期依靠短。在這種情況下,long會被跳過。 – peaxol

3

還有一個插件pytest-ordering似乎符合您的要求。

+0

Frank T.的回答已經提到這個插件,並在此答案前3年發佈。 – Ave

+0

恩,但他沒有提到這個名字。這就是爲什麼我完全錯過了這一點。 –