利用jenkins分布式執行selenium自動化測試


如果jenkins部署在linux服務器上,怎么來執行本地自動化測試,怎么來提高測試效率,或者如何進行瀏覽器兼容測試,怎么來簡化繁瑣的部署,不可能每個測試機子都部署一個jenkins來啟動持續集成,目前有挺多方式來解決這個問題,目前針對我們測試部我主要通過兩種方式解決:
方式一:利用jenkins分布式Master-slave來解決,selenium腳本不需要修改,環境部署好,可以直接跑
方式二:利用selenium grid分布式處理,這個有介紹過點擊打開鏈接,剩下就是把selenium grid放到jenkins里面,讓jenkins去管理,這個后續一篇介紹,這種方式,driver的url要改成hud的,腳本需要稍加修改

方式一:

一、環境部署

      1)Master配置

          Master指的是服務端,也就是jenkins

         打開Jenkins的web頁面,在‘系統管理’-‘管理節點’中點擊‘新建節點’,輸入節點名稱(節點指客戶端,你要用於測試的機子),選擇第一個,點擊ok

      

         跳到到如下圖,配置完成后,點擊save

      

        這時候還沒連接上,圖標是打叉的

    2)slave配置

       就是配置客戶端node(指定的測試機)

       點擊上面jenkins配置的node名稱進入,如圖

      

       介紹了slave nodes連接有兩種方式:

       方式一:點擊圖中launch,下載slave-agent.jnlp,把這個文件復制到slave機器,以上master配置預設的目錄E:\jenkins,記事本打開,核對ip地址,url,不要出現127.0.0.1或localhost之類的,無誤后然后運行,如圖

 

      之后,jenkin上node節點打叉消失,正常監控

 

       方式二:需要把slave.jar文件下載到客戶端node E:\jenkins,然后把命令復制,新建個bat文件,粘貼命令,然后把bat文件也放到E:\jenkins,點擊bat文件運行,Master-slave也可以連接上

       注意:配置過程中遇到個問題是,服務器在雲端,走的是外網,node是本地內網,需要用外網ip,通信的端口需要打通,才可以通信,這樣需要固定slave nodes連接 Master的端口,點擊jenkins系統管理-configure global security 固定端口,填寫開端口的端口號即可   

        還有就是Master-slave時間要同步,同時設置如圖

  

二、slave node執行自動化測試

       前提,node有需要測試的瀏覽器

       新建新建jenkins項目,復制以前jenkins自動化項目配置,點擊ok,配置中只需要修改幾點就可以

   

        修改1:在General下勾上Restrict where this project can 被run,選擇一個label,這個label就是創建節點時寫的標簽,指定運行的node,接下來源碼管理不變,還是按之前配置拉取

       修改2:構建觸發器,按需修改

       修改3:構建,選擇構建的pom,路徑要換成node節點的路徑,構建后,代碼會拉倒弄的機子配的工作目錄下,構建設置不變

         修改4:構建后報告地址要到node機子配的工作目錄讀取,郵件設置不變

      

         修改5:testng報告要到node機子配的工作目錄讀取

     

         點擊應用,完成。立即構建,等一會就可以看到node機子開始進行自動化測試了,付上jenkins部分日志,可以看到連接node,拉代碼,開始測試

         最后jenkins控制台輸出的日志會亂碼,這時候需要在node機子添點設置,右鍵我的電腦→屬性→高級系統設置→環境變量,添加JAVA_TOOL_OPTIONS,value為-Dfile.encoding=UTF8,注意是node機子。注意設置要正確,不然java虛擬機可能起不來。如下圖

 

方法二:

一、下載selenium插件

     目前jenkins 插件下載都是selenium 3了,我的腳本用的selenium2 ,所以我這里需要selenium 2插件,那只能離線下載安裝

     地址:http://updates.jenkins-ci.org/download/plugins/selenium/ 我這里下載的是2.53.0

     安裝:進入:系統管理-插件管理-高級,上傳,重啟jenkins即可

二、配置selenium grid hub

      重啟后,這樣selenium grid hub 已經啟動,首頁會有個selenium grid菜單,如圖

      

      點擊進入配置信息

      

      grid web console 可以打開hub 頁面,如下,console ouput就是之前服務端窗口,輸出日志

      

     這里特別提下端口,我這個是雲服務器,需要開端口,用的是4446,默認是4444,一開始怎么也找不到配置入口,工作目錄的配置文件找遍了,也不清楚在哪里配置,后來查官方文檔

 

    如上交代,再jenkins全局配置里設置,打開jenkins 系統管理-系統設置,找到selenium項,配置端口即可

   

三、配置selenium grid node

1、selenium grid簡介

selenium grid可以同時在不同機器上測試不同瀏覽器,包含一個hub和至少一個node。node會發送配置信息到hub,hub記錄並跟蹤每一個node的配置信息,同時hub會接受到即將被執行的測試用例及其相關信息,並通過這些信息自動選擇可用的且符合瀏覽器與平台搭配要求的node,node被選中后,測試用例所調用的selenium命令就會被發送到hub,hub再將這些命令發送到指定給該測試用例的node,之后由node執行測試。

2、selenium grid應用

測試多瀏覽器的兼容性,減少測試套件運行時間

3、selenium grid部署

這里使用selenium-server-standalone-2.48.2.jar,hub、node都需要啟動selenium-server-standalone-2.48.2.jar文件啟動

1)hud配置

java -jar selenium-server-standalone-2.48.2.jar -role hub -port 4446 ,默認端口為4444,如下啟動成功!

輸入http://xxx.xxx.xxx.xxx:4446/grid/console,如圖顯示

單擊view config可以查看selenium grid的配置信息,默認情況單個hub支持的5個會話

也可以通過配置json文件啟動

java -jar selenium-server-standalone-2.48.2.jar -role hub xxx.json

2)node配置

目前只配置一個node與hub不在同一機子

通過如下命令可啟動默認設置的node,node會將本機操作系統所支持的瀏覽器信息全部注冊到hub上,如下圖

客戶端cmd輸入命令:java -jar selenium-server-standalone-2.48.0.jar -role node -host 27.154.242.214 -hub http://xxx.xxx.xxx.xxx:4446/grid/register

現注冊一個node到hub,命令如下:

java -jar selenium-server-standalone-2.48.2.jar -role node -host 27.154.242.214 -hub http://xxx.xxx.xxx.xxx:4446/grid/register -browser browserName=firefox

seleniumProtocol=WebDriver,maxInstances=5,platform=WINDOWS 
 

如上命令只是修改了客戶端ip,如果端口被占用,也可以修改客戶端端口,再node后加 -port xxx ,默認是5555

注冊后服務端日志如圖,成功注冊了一個node,此時打開http://xxx.xxx.xxx.xxx:4446/grid/console,也會顯示注冊的node信息,這里就不附圖了

注意:客戶端必須能telnet進去服務端,服務端也要能telnet進去客戶端

4、執行

 

 
public static void main(String[] args) throws IOException {
 
// TODO Auto-generated method stub
 
DesiredCapabilities ff =DesiredCapabilities.firefox();
 
ff.setBrowserName("firefox");
 
ff.setPlatform("WINDOWS");
 
WebDriver driver = new RemoteWebDriver(new URL(serverUrl),ff);
 
driver.get("https://passport.csdn.net/account/login");
 
System.out.println("開始");
 
WebDriver augmentedDriver = new Augmenter().augment(driver);
 
File screenshot = ((TakesScreenshot) augmentedDriver)
 
.getScreenshotAs(OutputType.FILE);
 
FileUtils.copyFile(screenshot, new File("11.png"));
 
driver.quit();
 
 
 
}

 

運行如上實例代碼,服務端日志如圖,用例分給node 27.154.242.214:5555去執行

 

客戶端日志,就是具體執行selenium命令的日志信息。

四、腳本修改

     啟動driver,方式需要變一下,jenkins selenium grid已經給出實例,照寫就可以

    

      我用的selenium2采用方式二

 
public static WebDriver getRemoteDriver(RemoteBrowser remoteBrowser) {
 
DesiredCapabilities capability = null;
 
if (remoteBrowser.getBrowserName().contains("firefox")) {
 
capability = DesiredCapabilities.firefox();
 
} else if (remoteBrowser.getBrowserName().contains("chrome")) {
 
capability = DesiredCapabilities.chrome();
 
}
 
 
 
WebDriver driver = null;
 
try {
 
driver = new RemoteWebDriver(
 
new URL(remoteBrowser.getHubURL()), capability);
 
} catch (MalformedURLException e) {
 
e.printStackTrace();
 
}
 
capability.setBrowserName(remoteBrowser.getBrowserName());
 
capability.setVersion(remoteBrowser.getVersion());
 
driver.manage().window().maximize();
 
return driver;
 
}
    
// 測試方法
 
public static void main(String[] args) throws IOException {
 
WebDriver driver = driver = RemoteBrowser.getRemoteDriver(new RemoteBrowser());
 
 
driver.get("https://passport.csdn.net/account/login");
 
System.out.println("開始");
 
WebDriver augmentedDriver = new Augmenter().augment(driver);
 
File screenshot = ((TakesScreenshot) augmentedDriver)
 
.getScreenshotAs(OutputType.FILE);
 
FileUtils.copyFile(screenshot, new File("11.png"));
 
driver.quit();
 
 
 
}

 

五、jenkins構建

      按正常自動化項目構建即可,不需要修改,構建后可以看到hub分配給匹配的node,在匹配的node機子進行自動化測試,這里就不附日志了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM