selenium Grid2 分佈式自動化測試環境搭建

1、Selenium Server 環境配置javascript

一、selenium grid的組成與做用:由一個集線器hub和多個客戶機node組成,若是你的程序須要在不用的瀏覽器,不一樣的操做系統上測試,並且比較多的case須要多線程遠程執行,那麼一個比較好的測試方案就是使用 selenium grid,hub用來管理各個代理節點的註冊和狀態信息,而且接受遠程客戶端代碼的請求調用,而後把請求的命令再轉發給代理節點來執行。java

    其結構組成:node

           

 

二、下載 Selenium Serverandroid

  下載地址:http://www.seleniumhq.org/download/web

  根據環境中selenium版本號,選擇對應版本的selenium-server-standalone-xxx.jar。chrome

  因爲運行jar須要有對應的java環境,因此前提是要有java環境,在此略過java環境的你們。編程

三、運行selenium server瀏覽器

  經過命令行,切換到selenium server目錄下,執行 java -jar selenium-server-standalone-xxx.jar。便可執行該jar包。多線程

           

 

2、Selenium Grid 工做原理編程語言

       Grid 是用於設計幫助咱們進行分佈式測試的工具,其整個結構有一個hub主節點和若干個node代理節點組成。hub用來管理各個子節點的註冊和狀態信息,並接收遠程客戶端代碼的請求調用,而後把請求的命令再轉發給代理節點來執行。使用Grid遠程執行測試的代碼與直接調用Selenium Server是同樣的,只是環境啓動的方式不同,須要同時啓動一個hub和至少一個node。

     

#啓動主節點
java -jar selenium-server-standalone-xxx.jar -role hub 

#啓動代理節點 java
-jar selenium-server-standalone-xxx.jar -role node

 

上面的代碼分別啓動了一個hub 和 一個node ,hub默認端口:4444,node默認端口爲5555,如果同一臺主機上啓動多個node,則須要注意指定端口號,能夠經過下面的方式來啓動多個node節點。

        

#啓動多個代理節點
java -jar selenium-server-standalone-xxx.jar -role node - port 5555

java -jar selenium-server-standalone-xxx.jar -role node - port 5556

java -jar selenium-server-standalone-xxx.jar -role node - port 5557

 

使用場景:當測試用例須要驗證的環境比較多時,能夠並行執行這些測試用例,從而縮短測試總耗時。並行的能力須要藉助編程語言的多線程技術,後續會介紹Python的多線程技術,Grid 能夠根據用例中指定的平臺配置信息把用例轉發給符合匹配要求的測試代理。

例如,用例中指定了要在Windows7上用firefox瀏覽器進行測試,那麼Grid會自動匹配註冊信息爲Windows7且安裝了firefox的代理節點,若是匹配成功,則轉發測試請求,若是匹配失敗則拒絕請求。調用基本結構圖以下所示。

   

 

 

 一臺計算機上能夠啓動一個hub或多個node節點。

以下圖一個主機上啓動了一個hub和兩個node分支節點。

 

能夠經過瀏覽器訪問Grid的控制檯:http://127.0.0.1:4444/grid/console 。

經過控制條查看啓動的節點信息。

 

 

 3、Remote應用

一、Remote實例

1.一、首先啓動 Selenium Server 

 java -jar selenium-server-standalone-2.48.2.jar 

1.二、編寫自動化測試腳本。

         

#-*-coding:utf-8-*-
#Time:2017/8/24 23:33
#Author:YangYangJun

from selenium import selenium
from selenium.webdriver import  Remote
import time

driver = Remote(command_executor='http://localhost:4444/wd/hub',
                desired_capabilities={'platform':'ANY',
                                      'browserName':'firefox',
                                      'version':'',
                                      'javascriptEnabled':True})

driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys('remote')
driver.find_element_by_id('su').click()
time.sleep(5)
driver.quit()

 

從上面的代碼能夠看出,Remote()方法配置來看,至關於直接使用了webdriver.Firefox(),可是Remote()卻大大增長了配置的靈活性。

 

DesiredCapabilities 品臺及瀏覽器的參數以下:

FireFox = {'platform':'ANY', 'browserName':'firefox', 'version':'', 'javascriptEnabled':True, 'marionette':False }

Chrome = {'platform':'ANY', 'browserName':'chrome', 'version':'', 'javascriptEnabled':True }

Opera= {'platform':'ANY', 'browserName':'opera', 'version':'', 'javascriptEnabled':True }

Iphone= {'platform':'MAC', 'browserName':'iPhone', 'version':'', 'javascriptEnabled':True }

Android  = {'platform':'ANDROID', 'browserName':'android', 'version':'', 'javascriptEnabled':True }

.
.
.
.
.

 

 4、參數化平臺及瀏覽器

一、啓動本地node

 實例以下:先建立list 字典,定義不一樣的主機ip,端口號及瀏覽器。而後,經過for循環讀取lists字典中的數據做爲Remote()的配置信息,從而使腳本在不一樣的節點及瀏覽器下執行。

#-*-coding:utf-8-*-
# Time:2017/9/18 23:37
# Author:YangYangJun


from selenium import selenium
from selenium.webdriver import  Remote
import time

lists = {'http://localhost:4444/wd/hub':'chrome',
        'http://localhost:5555/wd/hub':'firefox'}


for host,browser in lists.items():
    print (host,browser)
    driver = Remote(command_executor=host,
                    desired_capabilities={'platform': 'ANY',
                                          'browserName': browser,
                                          'version': '',
                                          'javascriptEnabled': True})

    driver.get('http://www.baidu.com')
    driver.find_element_by_id('kw').send_keys('remote')
    driver.find_element_by_id('su').click()
    time.sleep(5)
    driver.quit()

 

 二、啓動遠程node

2.一、前置條件:

2.1.一、本地hub主機與遠程node主機之間能夠用ping命令連通。

2.1.二、遠程主機必須安裝用例執行的瀏覽器驅動,而且驅動要放到環境變量path的目錄下。

2.1.三、遠程主機必須安裝java環境,由於須要運行Selenium  Server。  

  

2.二、操做步驟:

 2.2.一、啓動本地hub主機,查看主機ip

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

2.2.二、啓動遠程主機,查看ip

       java -jar selenium-server-standalone-2.48.2.jar -role node -port 5555 -hub http://hup主機ip:4444/grid/register

lists = {'http://localhost:4444/wd/hub':'chrome',
        'http://node主機ip:5555/wd/hub':'firefox'}

 

5、知識拓展

一、建立startup.bat文件

  在啓動Selenium Server時,每次都要輸入一長串命令,很是麻煩,能夠啓動命令生成批處理文件,方法很簡單。首先建立一個startup.bat文件。

   以下圖:

     

 

 二、另外咱們還能夠經過VisGrid工具來啓動和管理節點,以下圖:

 

 

 三、開機自啓動startup.bat

對於分佈式測試遠程主機,若是每次測試前都要人爲啓動startup.bat,仍是太複雜了。因此想到了開機自啓動,首相想到的是作成service,結果沒有實現成功。

後選擇了開機自啓動。

操做步驟以下。

 3.一、添加啓動快捷方式,經過程序->啓動,單擊右鍵,打開全部用戶

 

將快捷方式粘貼到該路徑下。

 

 

3.二、經過運行執行msconfig,打開系統配置

 

 

而後勾選所要啓動的程序,點擊所有啓動便可。至此,每次開機後,系統會自動執行startup.bat。缺點是每次都會彈出一個命令行窗口。

 

6、使用過程常遇到的問題

一、驅動沒有添加到環境變量中。

二、配置了環境變量,可是仍然報錯。以下圖

產生緣由:參照了網上 java -jar selenium.jar -role node -port 6666 -hub http://192.168.1.132:4444/grid/register -Dwebdriver.firefox.driver=firefox.exe  -browser browserName=firefox 這種寫法。其實這種寫法對於firefox有些多餘。

直接這樣寫就行: java -jar selenium.jar -role node -port 6666 -hub http://192.168.1.132:4444/grid/register

 

 三、chrome 瀏覽器啓動報錯。

 

 

 一樣是這種寫法:java -jar selenium.jar -role node -port 6666 -hub http://192.168.1.132:4444/grid/register -Dwebdriver.chrome.driver=chromedriver.exe  -browser browserName=chrome

是由於沒有在該路徑下添加 chromedriver驅動。

 

 

解決辦法

  (1)、在該路徑下添加chromedriver便可。

  (2)、使用另外一種寫法:java -jar selenium.jar -role node -port 6666 -hub http://192.168.1.132:4444/grid/register

相關文章
相關標籤/搜索