模擬瀏覽器自動化測試工具Selenium之五Centos系統命令列下部署selenium環境試驗
阿新 • • 發佈:2019-01-23
一、背景:
Selenium是一個web自動化測試框架,也支援從HTML頁面上爬取javascript生成的或AJAX的內容。
selenium2支援通過各種driver(FirfoxDriver、IternetExplorerDriver、OperaDriver、ChromeDriver)驅動真實瀏覽器完成測試的。
selenium也是支援無介面瀏覽器操作的,如整合HtmlUnit和PhantomJs,不是真正的瀏覽器,執行時不會渲染頁面顯示內容,但是支援頁面元素查詢、動態js執行等;由於不進行css和gui渲染,執行效率要比真實的瀏覽器快。
現在的問題是在windows+eclipse環境下java開發(通過driver驅動的)的程式如何部署到命令列centos下執行selenium呢?
二、選型:
對selenium2支援瀏覽器driver、htmlunit、phantomJs三種進行比較:
1)selenium2整合htmlUnit
htmlUnit是java實現的類瀏覽器程式,包含在selenium server中,無須驅動,直接例項化就行。
用法如下:
WebDriver driver = new HtmlUnitDriver();//
WebDriver driver = new HtmlUnitDriver(true);//支援js
htmlUnit速度快,但對js支援不是很好,適合相對靜態的頁面爬取。
2)selenium2整合phantomJs
速度一般、模擬行為接近真實,但不能模擬不同/特定瀏覽器的行為,如滑鼠點選操作,適合非GUI功能性自動測試。
使用phantomJS配合selenium,可以建立無介面的瀏覽器。
但發現似乎只支援Python語言,Java語言沒有phantomJs例項,只能放棄。
3)真實瀏覽器driver
可真實模擬使用者行為,但效率、穩定性低,但支援特定瀏覽器行為,適合GUI功能測試。
筆者在開發情況,是選擇真實瀏覽器驅動,支援的比較完整,但要部署到命令列centos下時就需要找解決方案了。
Headless Selenium支援在伺服器上執行的健壯的自動化操作,不需要顯示裝置。
筆者計劃在命令列centos下采用Headless Selenium方案,用Xvfb建立虛擬的X視窗。
三、設定centos代理伺服器聯網:
1)全域性設定:
#vi /etc/profile
export http_proxy=yourproxy:port
export ftp_proxy=yourproxy:port
2)單獨yum的代理設定修改/etc/yum.conf
3)單獨wget的代理設定修改/etc/wgetrc
設定聯網方便yum安裝一些元件。
四、centos下部署phantomJS+selenium
實際生產中沒有選擇該方案,這裡給出,只是做參考。
1、安裝PhantomJS:
1)hantomJS 是一個基於WebKit的伺服器端 JavaScript API。它全面支援web而不需瀏覽器支援,其快速,原生支援各種Web標準: DOM 處理, CSS 選擇器, JSON, Canvas, 和 SVG。PhantomJS可以用於頁面自動化,網路監測,網頁截圖,以及無介面測試等。
2)安裝包下載地址:http://phantomjs.org/download.html,包括Windows,Mac OS,Linux版本,自行選擇對應 版本下載解壓即可(為方便使用,可自已為phantomjs設定環境變數),其中帶有一個example資料夾,裡面有很多已經寫好的程式碼供使用。
3)下載 phantomjs-2.1.1-linux-x86_64.tar.bz2 (22.3 MB) 並解壓;
#tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
#cd phantomjs-2.1.1-linux-x86_64/bin
進入bin資料夾執行測試
4)測試:
—新建文字檔案hw.js,輸入下面:
#vi hw.js
console.log('Hello, world!');
phantom.exit();
—執行
# ./phantomjs hw.js
提示:/lib64/libz.so.1: no version information available
更新zlib版本:
#wget http://zlib.net/zlib-1.2.8.tar.gz
#tar zxvf zlib-1.2.8.tar.gz
#cd zlib-1.2.8
# ./configure
#make
#make install
覆蓋原版本,可以先備份一下原版本
#cp /usr/local/lib/libz.so.1 /lib64/
5)建立軟鏈:
#ln -s /tmp/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs
命令列下直接使用phantomjs命令,不需要進入bin目錄下執行。
6)參考http://www.phperz.com/article/14/1115/35197.html
2、安裝pip:
1)檢視和升級python版本:
#python -V 是Python 2.6.6
升級python版本
#wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
#tar -xf Python-3.5.2.tgz
#cd Python-3.5.2
#./configure
#make
#make install
#ln -s /usr/local/bin/python3.5.2 /usr/bin/python
2)下載get-pip.py
https://bootstrap.pypa.io/get-pip.py
3)安裝pip:
#python get-pip.py
3、安裝selenium
1)pip安裝:
#pip install -U selenium
現在可以執行Python程式碼例項化webdriver.PhantomJS('phantomjs')爬蟲程式。
五、centos下部署Headless Selenium
實際生產中選擇了該方案,用Xvfb建立虛擬的X視窗,模擬執行瀏覽器。
Xvfb是一個實現了X11顯示服務協議的顯示伺服器。 不同於其他顯示伺服器,Xvfb在記憶體中執行所有的圖形操作,不需要藉助任何顯示裝置。
1、安裝chrome瀏覽器:
chrome對centos6不夠支援,需要安裝很多元件,升級至centos7。
#yum install google-chrome-stable
網上有很多說明配置yum源的,可以參考。
2、安裝Xvfb
#yum install Xvfb
#yum -y install libXfont
#yum install xorg-x11-fonts*
3、啟動Xvfb和瀏覽器
#Xvfb -ac:7 -screen 0 1280x1024x8
啟動 chrome
export DISPLAY=:7 (和上一步的number號相同)
chrome www.baidu.com
由於伺服器限制,沒有成功部署到,這裡先記錄做參考。
六、移植程式
將eclipse下的Java工程打包成jar,提交centos下java -jar執行,在啟動瀏覽器和Xvfb情況下執行。
七、總結:瞭解到selenium框架,並選定Xvfb來虛擬GUI實現centos下執行selenium,當然如果採用python語言可以選擇PhantomJS。
在部署過程中,由於聯網環境限制,yum源無法更新也無法安裝,因此只能作為參考先記錄。
後續在實際生產中,需要驗證:
1)centos7+chrome+Xvfb部署,驗證是否可以在命令列下啟動瀏覽器;
2)chromedriver_x64.exe驅動是否需要在程式碼顯示載入;
3)在前面兩個都滿足情況下,是否可以執行selenium;
Selenium是一個web自動化測試框架,也支援從HTML頁面上爬取javascript生成的或AJAX的內容。
selenium2支援通過各種driver(FirfoxDriver、IternetExplorerDriver、OperaDriver、ChromeDriver)驅動真實瀏覽器完成測試的。
selenium也是支援無介面瀏覽器操作的,如整合HtmlUnit和PhantomJs,不是真正的瀏覽器,執行時不會渲染頁面顯示內容,但是支援頁面元素查詢、動態js執行等;由於不進行css和gui渲染,執行效率要比真實的瀏覽器快。
現在的問題是在windows+eclipse環境下java開發(通過driver驅動的)的程式如何部署到命令列centos下執行selenium呢?
二、選型:
對selenium2支援瀏覽器driver、htmlunit、phantomJs三種進行比較:
1)selenium2整合htmlUnit
htmlUnit是java實現的類瀏覽器程式,包含在selenium server中,無須驅動,直接例項化就行。
用法如下:
WebDriver driver = new HtmlUnitDriver();//
WebDriver driver = new HtmlUnitDriver(true);//支援js
htmlUnit速度快,但對js支援不是很好,適合相對靜態的頁面爬取。
2)selenium2整合phantomJs
速度一般、模擬行為接近真實,但不能模擬不同/特定瀏覽器的行為,如滑鼠點選操作,適合非GUI功能性自動測試。
使用phantomJS配合selenium,可以建立無介面的瀏覽器。
但發現似乎只支援Python語言,Java語言沒有phantomJs例項,只能放棄。
3)真實瀏覽器driver
可真實模擬使用者行為,但效率、穩定性低,但支援特定瀏覽器行為,適合GUI功能測試。
筆者在開發情況,是選擇真實瀏覽器驅動,支援的比較完整,但要部署到命令列centos下時就需要找解決方案了。
Headless Selenium支援在伺服器上執行的健壯的自動化操作,不需要顯示裝置。
筆者計劃在命令列centos下采用Headless Selenium方案,用Xvfb建立虛擬的X視窗。
三、設定centos代理伺服器聯網:
1)全域性設定:
#vi /etc/profile
export http_proxy=yourproxy:port
export ftp_proxy=yourproxy:port
2)單獨yum的代理設定修改/etc/yum.conf
3)單獨wget的代理設定修改/etc/wgetrc
設定聯網方便yum安裝一些元件。
四、centos下部署phantomJS+selenium
實際生產中沒有選擇該方案,這裡給出,只是做參考。
1、安裝PhantomJS:
1)hantomJS 是一個基於WebKit的伺服器端 JavaScript API。它全面支援web而不需瀏覽器支援,其快速,原生支援各種Web標準: DOM 處理, CSS 選擇器, JSON, Canvas, 和 SVG。PhantomJS可以用於頁面自動化,網路監測,網頁截圖,以及無介面測試等。
2)安裝包下載地址:http://phantomjs.org/download.html,包括Windows,Mac OS,Linux版本,自行選擇對應 版本下載解壓即可(為方便使用,可自已為phantomjs設定環境變數),其中帶有一個example資料夾,裡面有很多已經寫好的程式碼供使用。
3)下載 phantomjs-2.1.1-linux-x86_64.tar.bz2 (22.3 MB) 並解壓;
#tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
#cd phantomjs-2.1.1-linux-x86_64/bin
進入bin資料夾執行測試
4)測試:
—新建文字檔案hw.js,輸入下面:
#vi hw.js
console.log('Hello, world!');
phantom.exit();
—執行
# ./phantomjs hw.js
提示:/lib64/libz.so.1: no version information available
更新zlib版本:
#wget http://zlib.net/zlib-1.2.8.tar.gz
#tar zxvf zlib-1.2.8.tar.gz
#cd zlib-1.2.8
# ./configure
#make
#make install
覆蓋原版本,可以先備份一下原版本
#cp /usr/local/lib/libz.so.1 /lib64/
5)建立軟鏈:
#ln -s /tmp/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs
命令列下直接使用phantomjs命令,不需要進入bin目錄下執行。
6)參考http://www.phperz.com/article/14/1115/35197.html
2、安裝pip:
1)檢視和升級python版本:
#python -V 是Python 2.6.6
升級python版本
#wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
#tar -xf Python-3.5.2.tgz
#cd Python-3.5.2
#./configure
#make
#make install
#ln -s /usr/local/bin/python3.5.2 /usr/bin/python
2)下載get-pip.py
https://bootstrap.pypa.io/get-pip.py
3)安裝pip:
#python get-pip.py
3、安裝selenium
1)pip安裝:
#pip install -U selenium
現在可以執行Python程式碼例項化webdriver.PhantomJS('phantomjs')爬蟲程式。
五、centos下部署Headless Selenium
實際生產中選擇了該方案,用Xvfb建立虛擬的X視窗,模擬執行瀏覽器。
Xvfb是一個實現了X11顯示服務協議的顯示伺服器。 不同於其他顯示伺服器,Xvfb在記憶體中執行所有的圖形操作,不需要藉助任何顯示裝置。
1、安裝chrome瀏覽器:
chrome對centos6不夠支援,需要安裝很多元件,升級至centos7。
#yum install google-chrome-stable
網上有很多說明配置yum源的,可以參考。
2、安裝Xvfb
#yum install Xvfb
#yum -y install libXfont
#yum install xorg-x11-fonts*
3、啟動Xvfb和瀏覽器
#Xvfb -ac:7 -screen 0 1280x1024x8
啟動 chrome
export DISPLAY=:7 (和上一步的number號相同)
chrome www.baidu.com
由於伺服器限制,沒有成功部署到,這裡先記錄做參考。
六、移植程式
將eclipse下的Java工程打包成jar,提交centos下java -jar執行,在啟動瀏覽器和Xvfb情況下執行。
參考程式碼:
package com.test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class headless { public static void main(String[] args) { System.getProperties().setProperty("webdriver.chrome.driver","/tmp/chromedriver.exe"); WebDriver webDriver = new ChromeDriver(); webDriver.get("http://www.baidu.com");//訪問網址 System.out.println(webDriver.getTitle()); webDriver.close(); webDriver.quit(); } }
七、總結:瞭解到selenium框架,並選定Xvfb來虛擬GUI實現centos下執行selenium,當然如果採用python語言可以選擇PhantomJS。
在部署過程中,由於聯網環境限制,yum源無法更新也無法安裝,因此只能作為參考先記錄。
後續在實際生產中,需要驗證:
1)centos7+chrome+Xvfb部署,驗證是否可以在命令列下啟動瀏覽器;
2)chromedriver_x64.exe驅動是否需要在程式碼顯示載入;
3)在前面兩個都滿足情況下,是否可以執行selenium;