1. 程式人生 > >在Cruise環境中加入Selenium整合測試

在Cruise環境中加入Selenium整合測試

前文中我們成功使用 ANT Maven2 Cruise 搭建了持續整合環境,實現了 compile test tag deploy publish 等自動化環境。今天我們再接再厲,為其加入 Selenium 整合測試。

關於 Selenium 的介紹和使用方法,在此不做贅述,各位可以藉助萬能的 google 來入門一下,下面我們直切主題。

整合測試前

部署工程

因為在執行整合測試時,需要工程在 web 容器下正常執行,所以,在 maven pre-integration-test 階段,我們需要將工程部署到 web 伺服器下:

 

 

啟動 selenium server

使用 maven 呼叫 selenium ,是通過 selenium-maven-plugin 這個外掛實現的,配置如下:


我們需要在 pre-integration-test 階段使用 start-server 目標啟動 selenium 伺服器,執行完整合測試,則需要在 post-integration-test 階段使用 stop-server 目標停掉之。

Xvfb

對於 linux 下的整合測試, cruise 可能執行在純字元介面,因此,當 selenium 啟動瀏覽器時,會報無 xserver 的錯誤,這時,我們就需要使用 xvfb 這個介面模擬程式來搞定這個問題了。正如下面這個連結所述


我們會在 pre-integration-test 階段啟動 xvfb ,然後 selenium 就可以在模擬的 xserver 中啟動瀏覽器了。

但是,我們這樣配置之後,雖然 linux 下可以正常執行整合測試,但是在 windows 下,我們的測試失敗了。

原因就出在這個 xvfb 上。在 windows 下,沒有這個程式來執行, pre-integration-test 階段自然就失敗了

我們使用 ${noxvfb} 變數,來決定是否執行 xvfb ,變數的值來自外部。那麼我們就可以用類似 mvn integration-test –Dnoxvfb=true 的命令來關閉 xvfb 了。

不過本地頻繁的輸入這個引數是一個很大的浪費(起碼鍵盤會折壽的說 ),而且還要人工判斷是否是 windows 系統。所以,再次請出 ant 大神:


使用 <contains string="${os.name}" substring="nux"/> 標籤來判斷系統是否為 linux ,以便決定是否啟動 xvfb

執行整合測試

Selenium maven 擴充套件支援兩種呼叫方式:使用使用 surefire junit 呼叫和 selenese

surefire junit 呼叫

Maven2 為我們提供了 integration-test 階段來進行整合測試,而一般我們會使用 maven-surefire-plugin 這個外掛來呼叫 junit ,進一步呼叫 Selenium 的測試用例( Selenium 支援多種語言進行),這一做法也可以找到一籮筐的解決方案,比如這裡:

和官方示例:

正如文中所述, maven-surefire-plugin 已經被預設註冊到了 test 階段,因此我們會使用如下的顯示定義來在整合測試階段呼叫 junit


注意:由於 cruise 已經支援分階段執行,因此我們不希望在 integration-test 階段重複進行 unit-test ,因此,在 utest 目標中,使用了 ${skiput} 變數來由命令列傳入 unit-test 開關。

Selenese

除了使用 surefire junit 呼叫,我們還可以使用 selenium-maven-plugin selenese 目標,它可以脫離 junit ,直接使用瀏覽器端的 selenium 測試程式碼進行整合測試。