Selenium 2 中擴展測試的限制
平行執行 Selenium 2
本頁試圖總結平行執行 Selenium 2 時出現的額外限制。
WebDriver 實例化
雖然單個 WebDriver 實例無法在線程之間共享,但可以輕鬆創建多個 WebDriver 實例。
臨時端口
TCP/IP v4 存在一個普遍問題,即 TCP/IP 堆疊在建立兩個套接字之間的連線時會使用臨時端口。典型的症狀是在運行一小段時間後(通常是一到兩分鐘)開始出現連線失敗。訊息內容可能略有不同,但總是在一段時間後出現,如果減少瀏覽器數量,最終會正常運作。
維基百科關於臨時端口 或快速 Google 搜尋「臨時端口」
目前 (2.13.0) 似乎全速運行的 Firefox 每個 Firefox 會消耗約 2000 個臨時端口;您的結果可能會有所不同。這意味著您在 Windows XP 上運行的瀏覽器數量少至 2 個時,甚至可能只有 1 個(如果您快速迭代),就可能耗盡臨時端口。
會修復嗎?
臨時端口問題的解決方案是在連線上使用 HTTP1.1 keep-alive。截至 2.13.0 版本,Firefox 不支援 keep-alive。
已修復的問題
- Java 客戶端。
- Selenium 伺服器 (“rc”)。
- Selenium Grid Hub 和節點
- Ruby 綁定(請參閱 RubyBindings 中的註釋)。
- IE 驅動程式。
- ChromeDriver
這表示您可以使用 Java 客戶端擴展到運行 Selenium 伺服器的遠端伺服器,並且永遠不會在中央建置伺服器上遇到任何問題。您可能需要在遠端伺服器上解決端口問題。
Microsoft Windows
如果您使用的是舊版本的 Windows (<=2003,包括 XP),則不應等待端口使用率降至足以容納此空間的程度。這可能永遠不會發生,儘管某些組合可能會發生。請參閱 http://support.microsoft.com/kb/196271 了解如何調整。
如果由於技術原因無法調整 Windows 機器上的端口範圍,您將無法運行超過 2-3 個 Firefox 瀏覽器。
避免端口鎖定
在每個測試類別/測試方法之間啟動新的瀏覽器速度很慢,並且端口鎖定也使用臨時端口,從而加劇了上述問題。
如果您使用的是無套件測試設定(如許多 JUnit4 用戶),您通常會在 @BeforeClass/@AfterClass 方法中啟動/停止瀏覽器。另一種選擇是在 @BeforeClass 中啟動瀏覽器,並使用類似 JUnit/TestNG 運行監聽器的工具在測試運行結束時關閉所有瀏覽器。Maven Surefire 支援 JUnit 和 TestNG 的運行監聽器。
(待辦事項:禁用端口鎖定並自行管理端口的策略)
原生事件
由於原生事件邏輯中的共享檔案,Firefox 驅動程式在並行運行時可能不應使用原生事件。(請關注 此問題)。