1. 程式人生 > >模擬瀏覽器自動化測試工具Selenium之五Centos系統命令列下部署selenium環境試驗

模擬瀏覽器自動化測試工具Selenium之五Centos系統命令列下部署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;