很久以前,我也使用selenium做自動化的集成測試,使用HtmlUnit的webdriver,所以不需要顯示器。但是HtmlUnit的表現總是有些不如意。而最近在項目中發現這篇文章,解決我長久以來的問題:在沒有顯示器的服務器上運行Firefox的集成測試。
Selenium是一個web自動化測試框架。用它可以實現web應用自動化測試。不過,我不只是用它來做測試,我還用它從電子商務網站簽到頁面爬取javascript生成的或AJAX的內容。
作為程序員,我不滿足於使用Selenium IDE來記錄和重放宏記錄。那樣很蹩腳,而且不適合部署到多台服務器。這時,你需要Selenium WebDriver,它又靈活,而且通過Selenium headless,運行Selenium在服務器上不需要顯示設備。
為什麼要運行Headless Selenium 測試?
當你希望能在服務器上運行的健壯的自動化操作,而其操作又依賴於 27X7,同時還希望它是穩定的,這時,Selenium是你唯一的選擇。但是,Selenium需要運行在浏覽器上。所以,你得騙Selenium,讓它覺得,它正跑在一台帶有顯示器的機器上。這樣,你就可以不間斷的跑自動化測試,同時又不失穩定性和擴展性。
如何在Ubuntu上運行Selenium headless
本教程的目標是在使用Mozilla Firefox作為主浏覽器的ubuntu上配置和運行selenium headless。
安裝Firefox headless
確認你的ubuntu安裝的是最新版本的Firefox。我遇到過Selenium的版本和Firefox的版本不兼容問題。如果你沒有安裝Firefox或者使用的是老版本的Firefox,可按以下步驟升級Firefox:
在/etc/apt/sources.list加入:
ppa:mozillateam/firefox-stable
運行以下命令升級或安裝Firefox
sudo apt-get update
sudo apt-get install firefox
運行成功後,ubuntu上就應該安裝好最新版本的Firefox了。
安裝Xvfb——一個X虛擬框架
這個仿真框架使用虛擬內存能讓X-Server運行在沒有顯示設備的機器上。這樣,浏覽器就可以運行了。在ubuntu和Debian上安裝xvfb,只要運行:
sudo apt-get install xvfb
現在,可以運行xvfb服務上一個帶有數字的顯示設備上,這樣是為了防止你在下階段添加設備時引發沖突。本教程,我們分配一個顯示設備 10.
sudo Xvfb :10 -ac
-ac代表關閉xvfb的訪問控制。好了,服務器可以運行了。
啟動浏覽器
在你運行浏覽器前,你首先要設置DISPLAY環境變量,以指定xvfb運行在哪個顯示設備上。在加入環境變量前,我們檢查一下所有的這些都如我們所料:
export DISPLAY=:10
firefox
如果終端(terminal)沒有顯示錯誤,就說明你已經成功運行Firefox在無顯示設備的ubuntu上了。它會一直運行,直到你使用ctrl + C或其它類似方法來終止其運行。同時,它不會有任何輸出。
如果你能成功運行以上的步驟,那麼接下來的部分就是輕而易舉了。現在,我們可以在ubuntu服務器上運行selenium,如同你在本地運行一樣。本教程的下一部分,我展示了如何運行一個獨立selenium服務器,同時使用PHP的selenium webdriver去連接。
小結
很久以前,我也使用selenium做自動化的集成測試,使用HtmlUnit的webdriver,所以不需要顯示器。但是HtmlUnit的表現總是有些不如意。而最近在項目中發現這篇文章,解決我長久以來的問題:在沒有顯示器的服務器上運行Firefox的集成測試。
而本文,我更多嘗試的是意譯。有不對的地方,謝謝斧正!
更多Ubuntu相關信息見Ubuntu 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=2