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