Selenium 2 中擴展測試的限制

總結平行執行 Selenium 2 時出現的額外限制。

此文件先前位於 Wiki 上

平行執行 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 驅動程式在並行運行時可能不應使用原生事件。(請關注 此問題)。

上次修改時間:2022 年 1 月 12 日:封存其他 Wiki 文章 (e75f49c8af3)