Selenium Conference 2017

Selenium 是為瀏覽器自動化(Browser Automation)需求所設計的一套工具集合,讓程式可以直接驅動瀏覽器進行各種網站操作。Selenium 執行「真實的瀏覽器」來進行網站操作的自動化,它能夠直接獲取即時的內容,包括被 JavaScript 修改過的 DOM 內容,讓程式可以直接與網頁元素即時互動、執行 JavaScript 程式,因此也適用於前端採用 AJAX 技術的網站。

Selenium 是許多 Web Testing 工具的核心,利用 Selenium 操作網頁表單資料、點選按鈕或連結、取得網頁內容並進行檢驗,可以滿足相當多測試的需求。

在今年的 Selenium conference 2017 中,提供了豐富的主題,包含強化 selenium 工具的應用,測試經驗的分享,以及測試管理的分享。最令人矚目的是selenium 工具的應用,原因是本次重點都特別強調雲端測試的重要性,以及自動曠散部署的彈性。

Selenium 的下一個世代

Simon Stewart 在本次的大會開始時就特別說明, selenium 在未來將會是一個強大且容易使用的自動化測試工具。在 selenium community 中,已經開始完整個社群雛形出現,在這之中包含了來自不同背景及能力的人加入了這個社群,這些人也撐起了整個 selenium 在未來的方向。有哪些方向值得注意?

一、THE SPEC

web driver / selenium grid 將會當今的主流,這兩項將會不斷的進化,讓使用者感受強大的功能。

二、STEERING COMMITTEE

如同前面所提到 selenium community 已經步向規模化,在 selenium community 中會開始提倡且廣邀世界各地對 selenium 有興趣的人來參與 selenium 的開發或是改進,讓這個專案可以是一個長久的專案。

三、

selenium IDE – 這會是一個令人非常興奮的消息,Selenium-IDE 是用來開發 Selenium 測試案例的工具。這是一個易於使用且是開發測試用例最有效的方法。 它允許您首先從瀏覽器當前顯示的頁面中選擇一個 UI element,然後從 Selenium 命令列表中進行選擇,並根據所選 UI element 的上下文預定義參數。在過去是入門學習自動化測試使用者的強大的工具,在今年為何又被特別提起的原因就是因為 selenium 在今年也會開始釋出除了 Firefox addon 以外的支援,這樣的優勢將會是讓 IDE 可以多方支援不同瀏覽器及跨瀏覽器的測試最重要的功能,換一個角度想也就表示,未來將會是一個 codeless 自動化的測試時代,不一定要身為碼農才能為自動化貢獻一己之力。

不可不知的分享內容

Selenium and the Four Rules of Simple Design

Thomas Sundberg 提出了四個規則,讓開發者可以開發出 readable and maintainable 的 selenium 測試程式.

  • Test pass – 測試的目標當然是希望可以通過測試,在撰寫過程中請專注於如何讓測試通過。
  • Express intent – 在測試程式中,有許多細節也必須注意,特別是該測試程式在測試哪些功能,程式當中的註解也需要明確的說明,最後 code commit 的訊息也必須描述清楚,方便確認和追蹤。
  • No duplication – 不要有超過兩個以上的重複代碼,盡可能把重複代碼撰寫成類別或是函示。
  • Small – 讓整個測試程式能夠簡潔,例如推薦使用 page object 的開發方法來讓程式碼達到可讀性和易讀性佳。

Codeless Visual Testing

測試自動化充滿了嘗試使用利用記錄 (Record) 回放工具來執行 UI 的功能測試失敗的恐怖故事。 在這個演講中,講者 Doron Zavelevsky 要大家客觀看待 IDE 工具,並評估它們對 UI 測試自動化的適用性。講者也展示記錄回放工具作為可視化測試驅動是非常有效的,並且使用 Selenium Builder 實現對網站的 UI 測試,而無需編寫任何的代碼。

Doron Zavelevsky 在此也展示了目前 selenium IDE 將不在只支援 Firefox 瀏覽器的應用。 Chrome 瀏覽器也加入了 selenium IDE 的功能,強化了不同瀏覽器測試的方便。

Good, Cheap, and Fast: Scaling Your Selenium Grid in the Cloud

這一場的演講直接說明了傳統的 selenium grid 架構其實是有缺點的,硬體設備的考量這就是最大的問題,對於公司需要不同的設備或是環境,確實不敷使用。再者,環境的不穩定性也是潛在的問題,長時間測試讓某個 instance 會遇到 unknown issue 或是更新系統的狀態,所以需要 restart 來維持乾淨穩定的狀態。Johnathan Constance 在公司維持這樣的環境三年後,發現支出的成本確實很高,舉例來說,設備成本,維護成本,更重要的是人的成本更是浪費。於是決定將公司內部的環境完整搬移至 AWS 上面。


左圖表示當初公司建構 selenium grid 時所產生的成本,圖表上可以實體的硬體的確數量大,這樣造成的維護成本高。透過 AWS 的 cloud farm 的設計,再搭配 AWS 提供設備的競價機制,在平時所需要的最小成本或是架構下進行測試,即可以達到目的,若是需要大量寫多環境的測試,將可以啟用 AWS 的 Auto scaling 機制,快速擴充,加速測試,成本上很明顯的可以看到,每個月的金額花費只需要 local host 的 20% 花費。這也是為什麼講者不斷地強調,自行建置的成本包含許多隱形成本,這些數字是非常可觀的,建議測試架構在雲端,並且搭配適當的擴充機制,來達到快速大量測試的目標,又可以節省成本。

Scalable Selenium Cluster: Up & Running

如果測試需要 Big Selenium cluster ,一定要好好的看過這次的分享。本次的分享包含 Standard Selenium architecture 也能執行 load balancing solution 的設計。 講者 Ivan Krutov 在公司所應用到的測試環境,可以看到瀏覽器的測試高達 5000 個以上,而且是 24 小時不停的跑測試。所以能夠快速的延展測試環境,也可以倚賴了 Docker container。

下圖是整個測試環境的概念圖

當 automation script 啟動時,會透過 selenium API 去通知 Docker ,起一個 container ,這個 container 類似於一個 hub 的概念,會把所有 session 保留在這邊再進行分發,所以有測試都會配發的一個 container,獨立的跑各自的測試,彼此的測試並不會互相干擾,測試結束後會再回傳 callback 告知測試結果,然後關閉 container。

整個測試架構的好處包含了:

  • Load balancing solution
  • Creating lightweight nodes and using Docker
  • Easy update Browsers, not browser webdriver

Adding Performance Assertion to Standard Functional Testing

GoDaddy 的性能工程團隊已經使用了許多不同的工具和方法來防止 performance 下降,從測試實驗室的 loading testing 到 server site performance monitor 再到真實用戶監控(RUM)。儘管做了所有這些努力,但數據不斷顯示,緩慢的 application 會讓使用者體驗變差。

Selenium performance

GoDaddy的大部分團隊遵循測試自動化的 Selenium 的 CI / CD 流程。 Selenium WebDrivers 能夠提供與真實瀏覽器相同的 API(包括廣泛支持的 W3C 性能 API,他們建制了新的工具 cicd-perf-api web,透過將 JavaScript 代碼插入到 WebDriver 對像中,可以收集 perference 數據並將其收集,測試人員可以使用它來進行檢查 – 就像他們在功能檢查中一樣,檢查 perference 是否高於/低於標準。

GoDaddy 的標準是每個 page load 必須維持在 2 secs 內,當某一個 build 所測試出來的結果大於 2 secs,這個 build 將會被退回並且檢查是哪個環節出了問題造成問題。他們的工具是:

透過 timings API 嵌入到 web 之中,將每一次測試的結果收集後透過 ELK 顯示,確認是否有問題,密集監控,以確保網站的 page load 都維持在 2secs 以下。

結論

Selenium Grid 仍然會是主流,但會透過合作的對象將會開始延伸,例如:

  • 開始與 docker container 整合,做 auto scaling 的應用。
  • 或是與不同的雲端測試提供服務商合作,來達到快速部署,快速測試,並且有效節省成本來幫助企業達到完整的服務。

Selenium 在未來也將會是每個人都可以參與自動化產出的時代。

References: Selenium conference 2017, Talks at the conference

Related Post