2016-12-30 140 views
0

我有很多'長測試',我不得不等待一些相對較大的超時(分鐘)。 例如,我在測試中調用了一些API,等待15分鐘,之後檢查網頁是否有變化。如何在等待時暫停py.test測試並做一些其他測試?

所以,問題是 - 如何暫停一些測試,但在等待的時間做其他檢查。 我不能只用睡覺() - 這種情況下的全套測試套裝將持續數小時(15分鐘*(此類測試的數量))。

的一個解決方案,我看到 - 安排試驗(與鉤pytest_collection_modifyitems):

  1. 運行第一部分(前15分鐘暫停)所有長測試(呼叫在上述長的測試示例API)
  2. 運行所有短期測試
  3. (可選)等一會兒,如果花了不到15分鐘
  4. 所有長時間的測試
  5. 運行第二部分(停頓後)(查看網頁在上面的例子中)
(2)

但是,這只是一個大混亂,很難管理。

而且這產生了很多在(1)中運行的虛擬測試 - 實際上這是類似於測試設置的東西,我不需要它們的結果,但pytest會將它們作爲單獨的測試進行處理。

UPD xdist並沒有什麼幫助 - 即使我可以控制它如何並行化測試(在哪些組中同時運行),我將不得不併行運行所有長測試,因爲我想在時間內做一些有用的事情等待,而不僅僅是等待(15分鐘*(長測試次數))/(xdist進程數量)。

看來唯一的辦法 - 打補丁pytest的主循環了點。所以它會異步運行測試。但是,我甚至不知道從哪裏開始做的..

+0

似乎你想要並行執行幾個動作。在這種情況下,你可能需要使用https://docs.python.org/2/library/multiprocessing.html或https://docs.python.org/2/library/thread.html#module-thread – Andersson

+0

謝謝,非常好的主意!以線程內部的簡單睡眠運行第二部分。但我不明白在py.test中返回結果所需的'管道'。看來我必須在主py.test線程的某個地方等待所有這些額外的線程完成,但在什麼地方?以及如何將所有斷言從其他線程傳遞到主線程?我認爲這是一個庫,專門用於py.test。 – MasterAndrey

回答

0

有一個pytest-xdist plugin for pytest,使試運行並行化。也就是說,您的測試將同時由多個進程(在多個CPU上)同時運行。這並不完全符合你所要求的 - 它不會暫停長時間運行的測試 - 但它確實允許其他測試在長時間運行的測試運行的同時運行。

如果你可以編輯你的問題來描述你的「第一部分」和試驗「第二部分」的意思,我也許能夠給出更好的答案。

+0

謝謝你的想法。剛纔我不明白xdist如何幫助解決我的問題。我編輯了這個問題來詳細說明我的想法。 – MasterAndrey