Architecture Decision Record

Active theme: Light

← 決策記錄例子

架構決策記錄:端對端測試嘅瀏覽器自動化框架(Playwright 對 Selenium)

1. 背景

我哋正為端對端(E2E)測試管線揀選瀏覽器自動化框架。呢個框架會係我哋 CI/CD 流程嘅重要一環,運行模擬真實用戶喺平台上互動嘅測試。具體嚟講,測試會涵蓋用戶註冊/登入、檔案上載、儀表板互動同報告下載等情境。

作為初創公司,我哋嘅重點係敏捷開發,需要快速迭代同演進。我哋團隊主要用 TypeScript 同 Python,所以必須可以用呢啲語言寫測試。此外,平台包含互動圖表同儀表板,所以自動化工具必須能夠好好支援豐富、動態嘅用戶介面。

呢項任務嘅兩個競爭者係 Playwright 同 Selenium,各有強項同取捨。我哋需要根據以下列出嘅功能同需求去評估呢兩個框架。

2. 考慮過嘅選項

  • Playwright(Microsoft 出品)
  • Selenium(Selenium 項目出品)

3. 決策驅動因素

影響我哋決策嘅因素如下:

  1. 敏捷開發:所揀選嘅工具必須支持快速而靈活嘅開發週期。
  2. 語言支援:我哋團隊需要同時支援 TypeScript 同 Python。
  3. 互動用戶介面測試:必須能夠可靠咁測試互動圖表、儀表板同動態元素。
  4. 運行速度:雖然唔係首要考慮,但 CI/CD 管線入面嘅效能都要考慮。
  5. 可擴展性:我哋短期內冇計劃大規模擴展,不過想確保方案可以應付日後嘅增長。
  6. 向後兼容性:舊有系統同舊版瀏覽器嘅兼容性,暫時對我哋項目並非關鍵。
  7. 流動裝置測試:雖然並非即時焦點,但框架應該能夠測試流動裝置響應式功能,或者可以為此類用途擴展。
  8. 多螢幕測試:支援多螢幕配置係次要需求,尤其係如果我哋將來擴展到測試更複雜嘅用戶工作流程。
  9. 檔案上載測試:框架必須有效處理檔案上載,呢點係我哋測試需求嘅核心。

4. 評估準則

  • 易用性:寫同維護測試有幾容易?
  • 語言支援:框架有冇支援 TypeScript 同 Python,即係我哋團隊最常用嘅兩種語言?
  • 互動用戶介面測試:框架處理圖表、檔案上載同動態數據等複雜互動用戶介面嘅能力有幾好?
  • CI/CD 整合:框架同常見 CI/CD 工具同服務整合得幾好?
  • 跨瀏覽器支援:支援邊啲瀏覽器,表現幾好?
  • 效能同速度:測試運行有幾快,尤其係喺 CI/CD 管線入面?
  • 可擴展性:如果加入更多測試或者更複雜嘅情境,框架可以擴展到幾好?
  • 社群同生態系統:框架嘅社群有幾活躍?有冇大量可用嘅整合同擴充?

5. 考慮事項

5.1 Playwright

優點:
  1. 更聰明嘅本機檔案上載 API:Playwright 用嚟同本機檔案互動同執行檔案上載嘅 API 更簡單、更直觀。咁樣會令檔案上載測試更易實施同維護。
  2. 語法同程式碼生成:Playwright 嘅語法更短、更精簡。咁樣減少咗樣板程式碼,提升可維護性同開發效率。此外,較短嘅語法亦改善 OpenAI 程式碼生成嘅質素,令自動生成測試腳本更容易。
  3. 互動用戶介面測試:Playwright 擅長測試動態、互動嘅網頁應用程式,例如有豐富圖表、複雜用戶互動同即時更新嘅應用程式。佢非常有效咁處理 WebSockets、WebRTC、shadow DOM 同其他現代網頁技術。
  4. 跨瀏覽器支援:Playwright 支援 Chromium、WebKit 同 Firefox。佢喺呢啲瀏覽器上表現一致,應該涵蓋我哋大部分測試需要。
  5. CI/CD 整合:Playwright 同現代 CI/CD 平台(GitHub Actions、Jenkins 等)無縫整合。佢可以喺不同瀏覽器之間並行運行測試,優化測試運行時間,適合快速開發。
  6. 快速而可靠:Playwright 一般比 Selenium 快,尤其係喺無頭(headless)模式,而且處理非同步網頁元素時更具韌性。
缺點:
  1. 流動裝置測試有限:雖然 Playwright 支援瀏覽器嘅流動裝置模擬,但佢欠缺原生流動裝置測試能力,唔似 Selenium 整合 Appium 進行真正嘅流動裝置測試。
  2. 生態系統較細:Playwright 仍然較新,冇 Selenium 咁成熟。雖然佢嘅社群急速增長,文件亦好,但可能暫時未有 Selenium 提供嗰種龐大嘅外掛同整合生態系統。
  3. 瀏覽器支援有限:雖然 Playwright 涵蓋主要嘅現代瀏覽器(Chrome、Safari、Firefox),但對舊版瀏覽器(例如 Internet Explorer)嘅支援,冇 Selenium 咁穩健。

5.2 Selenium

優點:
  1. 歷史更悠久、更成熟:Selenium 已經存在好耐,往績已經得到證明。佢被好多團隊同行業廣泛使用,因而形成龐大嘅外掛、整合同資源生態系統。
  2. 跨瀏覽器同跨平台支援:Selenium 支援種類繁多嘅瀏覽器同版本,包括 Internet Explorer,亦可以同 Docker、Selenium Grid 同雲端服務等多種工具整合,進行分散式測試。
  3. 流動裝置測試:Selenium 透過整合 Appium,喺流動裝置測試方面(包括 Android 同 iOS 應用程式)強大得多。咁樣令佢成為以流動優先或者以流動為重嘅項目嘅較佳選擇。
  4. 多螢幕測試:Selenium 對涉及多螢幕或者複雜多視窗互動嘅情境,提供更好嘅支援。
缺點:
  1. 複雜度:Selenium 嘅 API 更冗長、更明確。雖然喺某啲情況下可以係優點,但意味住要寫同維護更多程式碼,可能降低開發人員嘅敏捷度,喺初創公司環境尤其重要。
  2. 效能:Selenium 一般運行得比 Playwright 慢,尤其係喺無頭模式。呢點可能影響 CI/CD 管線,特別係測試數目增加嗰陣。
  3. 互動用戶介面測試:喺測試現代、互動嘅網頁用戶介面,尤其係圖表同即時數據更新方面,Selenium 冇 Playwright 咁順暢。要可靠咁同動態內容互動,需要更多設定同處理。

6. 比較摘要

功能 Playwright Selenium
易用性 語法更短,對現代用戶介面更直觀 更明確,需要更多樣板程式碼
語言支援 TypeScript、Python、JavaScript TypeScript、Python、Java、Ruby、C#
互動用戶介面測試 非常適合動態、即時用戶介面 處理基本用戶介面,但對豐富互動較冗長同複雜
檔案上載測試 更聰明嘅檔案上載 API 較冗長,API 較不直觀
CI/CD 整合 輕鬆整合 GitHub Actions、Jenkins 同多種 CI 工具有強力整合
流動裝置測試 有限,只有模擬 透過 Appium 全面支援
跨瀏覽器支援 Chromium、WebKit、Firefox 全面支援主要及舊版瀏覽器
效能 快速,針對無頭測試優化 較慢,尤其係無頭模式
多螢幕測試 有限 對多螢幕設置支援良好
社群同生態系統 增長中,文件良好 龐大、成熟、生態系統廣泛

7. 決策

考慮過需求同取捨之後,Playwright 係我哋目前需要嘅較佳選擇。佢更聰明嘅本機檔案上載測試 API、精簡嘅語法,以及對互動用戶介面測試嘅強力支援,令佢非常適合我哋嘅敏捷開發週期。佢同時支援 TypeScript 同 Python,對我哋團隊至關重要,而框架現代化嘅測試方式,亦令我哋可以寫出簡潔、易維護嘅程式碼。

Selenium 雖然仍然係一個出色嘅工具,尤其適合流動裝置測試、舊版瀏覽器支援同多螢幕設置,但較不適合我哋目前嘅需要。佢嘅冗長、較慢嘅效能,以及處理圖表等動態用戶介面時較複雜,令佢對我哋嘅使用情況冇咁理想。

8. 後果

  • 即時行動:我哋會採用 Playwright 進行端對端測試,重點測試涉及註冊、登入、檔案上載、儀表板同報告下載嘅用戶流程。
  • 長遠考慮:我哋會留意 Playwright 生態系統嘅發展。如果我哋嘅需要有變,尤其係流動裝置測試或者舊版瀏覽器支援方面,我哋可能會重新考慮 Selenium。
  • 培訓同文件:開發團隊需要熟悉 Playwright 嘅 API,尤其係處理動態用戶介面同檔案上載方面。
  • 遷移:現有嘅 Selenium 測試(如有)會逐步遷移到 Playwright。

9. 未來考慮