2017-06-06 112 views
0

目前,我有五個phantomjs在我的Selenium網格上設置的實例都在不同的節點上。我試圖一次運行5個並行測試,但其中一些測試會失敗。每一次,這是一個不同的測試,將在不同的線路上失敗。爲並行執行優化Selenium測試

我也放入了等待和斷言等到元素出現,但測試用例每次仍然在不同的點上失敗。但是,當我逐個運行測試時,所有測試都會通過100%的時間。

有什麼辦法可以優化我的並行執行測試嗎?

我的測試是在Windows環境下用Java編寫的。我使用的是phantomjs 1.9.8和Selenium 3.54

+0

我想你應該嘗試找出瓶頸:可能是記憶,資源衝突 - 幾乎任何東西。一旦你知道它是什麼,你可以消除它,或者解決它。 –

回答

1

軼事:當我發現我的測試在我的機器上運行良好但在網格節點上運行得並不好時,它通常是計時問題。我的工作站比我的虛擬機(網格節點)功能強大,所以簡單的動畫渲染時間更長。它達到了我使用.ClickViaJavaScript()來代替.Click()的地步。在js點擊之後,我還投入了500毫秒的睡眠時間。

// Click element via JavaScript 
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click()", element); 
// Wait a moment 
System.Threading.Thread.Sleep(500); 

並行並沒有真正必要被重寫任何代碼,只要你不要在運行時改變全局變量和每個測試是原子。

+0

我的測試涉及大量的點擊和加載不同的頁面,這可能是問題所在。我處於活動等待狀態(所以請等待,直到頁面上的某個元素出現),但這些會在約4秒後等待超時)。我聽說靜態等待是一種不好的編碼習慣? – Jay

+0

靜態等待並不被認爲是最佳實踐,但有時你會做你必須做的。另外,你4秒的超時時間非常短。通常,我會在10,30或60秒鐘左右(無論是隱式還是顯式)看到超時。 –

+0

是的,我增加了我的動態超時時間,並會給出一個鏡頭,如果這不起作用,我會研究靜態等待。謝謝你的幫助 :) – Jay