Selenium 的持續整合實作

我們過去使用 Jenkins CI 工具來執行單元測試,並在 Sauce Labs 上執行整合測試。我們已將所有測試移至 Travis,現在使用 Github Actions 執行所有項目。

此文件先前位於 wiki

一般架構

我們有許多執行 Ubuntu 的 Google Compute Engine 虛擬機器,目前託管在 {0..29}.ci.seleniumhq.org - 它們已設定可公開定址的 DNS,以指向 ab.{0..29}.ci.seleniumhq.org,以便 cookie 測試可以執行子網域查詢。

其中一台機器 ci.seleniumhq.org 正在執行 jenkins。如果您想要 jenkins 的登入權限,請聯絡 juangj。「Build All Java」工作會輪詢 SCM 以檢查變更,並執行以下操作

當此建置成功時,它會針對我們關心的每個作業系統/瀏覽器/測試組合觸發下游建置。它也會觸發下游全新建置,以確保我們的 maven poms 仍然井然有序 ("Maven build")。

除了在與編譯相同的建置節點 (功能強大的 8 核心機器,配備 32GB RAM) 上執行的 "Maven build" 之外,所有下游建置都在個別的建置節點上執行。

下游建置是使用環境變數設定的,如 SauceDriver 類別所示。下游建置從建置主節點下載 selenium-trunk tar,然後執行測試 (應已由「Build All Java」規則編譯)。這些下游建置中有兩個是特殊的;「HtmlUnit Java Tests」和「Small Tests」僅在本機無頭執行。其他則使用 SauceLabs

關於網路的注意事項:建置節點設定在內部網路 10.1.0/24 上,因此它們之間的網路通訊非常快速且免費。

當非無頭瀏覽器測試執行時,test-file servlet 會將測試檔案託管在由環境變數 (231${EXECUTOR_NUMBER} 和 241${EXECUTOR_NUMBER} - EXECUTOR_NUMBER 目前始終等於 0) 決定的連接埠上。測試使用的主機名稱由環境變數 (ab.${NODE_NAME}.ci.seleniumhq.org,其中 NODE_NAME 在 {0..29} 中) 設定。瀏覽器是使用我們的憑證 (儲存在 Jenkins 範圍的環境變數中,在「System Configuration」頁面上設定) 從 SauceLabs 請求的。Jenkins 目前設定為每次測試執行時並行執行三個測試類別,同樣在「System Configuration」頁面上。

測試已執行,結果會通知 IRC。

感謝 SauceLabsGoogle 捐贈基礎架構來執行所有這些測試。

常見問題

我想像 Jenkins 一樣在 Sauce 上執行我的測試 (我的測試在 CI 上失敗,但在我的機器上運作良好!)

請參閱 SauceDriver 頁面

我想新增一個新的瀏覽器 (Firefox 發布了新版本!)

Jenkins 沒有範本的好概念。我 (dawagner) 有一些 selenium 腳本可以自動化 Jenkins 的 UI,以使用預設設定建立新工作。如果您想手動執行,以下是大致的步驟

  • 尋找您要複製的最相似設定。如果是新的 Firefox 版本,請尋找最新的 firefox (應該有大約 6 個與之關聯的建置:Javascript + Java {Windows,Linux} **{Native,Synthesized}
  • 針對這些建置中的每一個,建立一個新工作 (登入後,在首頁左側的選單上)
  • 以其他工作的風格命名工作。選取「複製現有工作」,然後輸入您要複製的工作。
  • 捲動瀏覽預先填入的工作。取代版本號碼、瀏覽器名稱和任何其他需要取代的詳細資訊。對於 firefox 更新,目前有三個地方您應該取代數字 (「browser_version」欄位,以及「Build Execute Shell」中的兩個)
  • 儲存
  • 前往「Build All Java」工作,設定它,將您的新建置新增到「Projects to build」欄位,其中列出了許多其他項目。**

如果是 firefox 更新,您可能也想要刪除現有的建置。

上次修改時間:2022 年 1 月 10 日:更多 wiki (#907) [部署網站] (adcf706a1ad)