我有很多'長測試',我不得不等待一些相對較大的超時(分鐘)。 例如,我在測試中調用了一些API,等待15分鐘,之後檢查網頁是否有變化。如何在等待時暫停py.test測試並做一些其他測試?
所以,問題是 - 如何暫停一些測試,但在等待的時間做其他檢查。 我不能只用睡覺() - 這種情況下的全套測試套裝將持續數小時(15分鐘*(此類測試的數量))。
的一個解決方案,我看到 - 安排試驗(與鉤pytest_collection_modifyitems):
- 運行第一部分(前15分鐘暫停)所有長測試(呼叫在上述長的測試示例API)
- 運行所有短期測試
- (可選)等一會兒,如果花了不到15分鐘 所有長時間的測試
- 運行第二部分(停頓後)(查看網頁在上面的例子中)
但是,這只是一個大混亂,很難管理。
而且這產生了很多在(1)中運行的虛擬測試 - 實際上這是類似於測試設置的東西,我不需要它們的結果,但pytest會將它們作爲單獨的測試進行處理。
UPD xdist並沒有什麼幫助 - 即使我可以控制它如何並行化測試(在哪些組中同時運行),我將不得不併行運行所有長測試,因爲我想在時間內做一些有用的事情等待,而不僅僅是等待(15分鐘*(長測試次數))/(xdist進程數量)。
看來唯一的辦法 - 打補丁pytest的主循環了點。所以它會異步運行測試。但是,我甚至不知道從哪裏開始做的..
似乎你想要並行執行幾個動作。在這種情況下,你可能需要使用https://docs.python.org/2/library/multiprocessing.html或https://docs.python.org/2/library/thread.html#module-thread – Andersson
謝謝,非常好的主意!以線程內部的簡單睡眠運行第二部分。但我不明白在py.test中返回結果所需的'管道'。看來我必須在主py.test線程的某個地方等待所有這些額外的線程完成,但在什麼地方?以及如何將所有斷言從其他線程傳遞到主線程?我認爲這是一個庫,專門用於py.test。 – MasterAndrey