Sahi 是一款優秀的開源 Web UI 自動化測試框架。Jenkins 是業界眾所周知的持續集成工具。Docker 是一個開源的應用容器引擎,一顆冉冉升起的技術新星。本文通過一個實例,介紹如何將三者集成構建 Web UI 自動化測試環境。
Docker 介紹
Docker 號稱是下一代的虛擬機,它在啟動和創建速度、性能、移植性等方面均優于傳統虛擬機。Docker 是 PaaS 提供商 dotCloud 開源的一個基于 LXC 的高級容器引擎。它能夠讓開發者打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。目前,通過 Boot2Docker 已能使 Docker 運行在 Windows 和 OS X 中。Docker 容器完全使用沙箱機制,相互之間沒有任何接口。Docker 幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是, 他們不依賴于任何語言、框架或系統。
Docker 在其網站上明確地提到的 Docker 的典型應用場景如下:
對應用進行自動打包和部署
創建輕量、私有的 PAAS 環境
自動化測試和持續整合與部署
部署和擴展 Web 應用、數據庫和后端服務
在自動化測試領域,Docker 大有取代傳統虛擬機技術的趨勢,原因如下:
自動化測試依賴的是測試所需要的應用,而并非整個操作系統。因此,傳統的虛擬機技術存在資源浪費。
Docker 構建于 LXC 之上。借助 LXC 輕量級的特性,相比于目前的虛擬機技術,Docker 啟動更快、資源占用更小。
Docker 比虛擬機輕量、靈活,便于管理。
Docker 標準化的構建方法 (Dockerfile) 和良好的 REST API,使得自動測試和持續集成/部署能夠很好的集成進來。
Sahi 介紹
Sahi 是一個開源的 Web UI 自動化測試框架。盡管它的知名度不及 Selenium,用戶群也不及 Selenium 龐大,但它確有它獨特的魅力,例如:
基于上下文的頁面元素識別機制。
隱式頁面加載響應等待機制。
良好的瀏覽器支持。
優秀的跨瀏覽器錄制回放調試工具 Sahi Controller。
這些特性都大大地加快了自動化測試腳本的開發速度,并降低了維護成本。
Sahi 通過一個用 Java 編寫的代理服務器,將用戶的腳本轉換為 JavaScript 后注入往返的 HTTP 請求及響應中,從而驅動瀏覽器事件。編程語言方面,除 Sahi 腳本(其本質是一個 JavaScript 庫)以外,還支持 Java 和 Ruby。Sahi 有開源和收費兩個版本。雖然收費版本提供了很多開源版本不具備的高級特性,不過開源版本已經能夠滿足大部分的功能要求。點此查看開源版本與收費版本的差異。點此查看Sahi 與其他 Web 自動化測試框架的對比。
Jenkins 介紹
Jenkins 是一種開源的基于 Java 開發的持續集成工具,前身稱作 Hudson。Jenkins 提供了用于監控持續重復工作的軟件平臺。它支持豐富的插件,用戶可以按照需求進行選擇安裝和配置,以實現生成執行狀態表格,自動部署、更新自動化測試包等高級功能。本文將要介紹 Jenkins 的 Docker 插件,它能夠動態地創建 Docker 容器作為 Jenkins Slave 節點,并在執行任務后,自動關閉容器。另外,它還支持一些額外功能,比如當構建任務成功完成后自動將容器保存為鏡像、自動將鏡像上傳到資源庫等。
實例演示
該實例演示如何制作一個運行 Sahi 的鏡像以及如何在 Jenkins 上配置 Docker 插件以運行 Sahi 測試腳本。
準備 Docker 鏡像
本實例需要準備三個鏡像:一個運行 Jenkins,一個運行 Subversion,另外一個運行 Sahi。
首先,制作運行 Sahi 的鏡像。Docker Hub 是一個用于分享 Docker 鏡像的資源庫。目前,該資源庫還沒有運行 Sahi 的鏡像,所以必須自己創建 Dockerfile 來構建鏡像。下圖是用來制作 Sahi 鏡像的目錄。
圖 1. 制作 Sahi 鏡像的目錄
下圖是 Dockerfile 的文件內容。
圖 2. Dockerfile文件內容
整個過程大體分為八個步驟:
1.指定基礎鏡像
我們使用的是 evarga/jenkins-slave。該鏡像基于 Ubuntu,安裝了 SSH 服務,并創建了用戶 Jenkins。
原文轉自:http://www.uml.org.cn/Test/201507314.asp