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