1. 程式人生 > >selenium Grid2

selenium Grid2

Coding 靈活性 windows7 path 作用 nod des 選擇 變量

一、Selenium Server 環境配置

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

其結構組成:

技術分享

2、下載 Selenium Server

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

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

  由於運行jar需要有對應的java環境,所以前提是要有java環境,在此略過java環境的大家。

3、運行selenium server

  通過命令行,切換到selenium server目錄下,執行 java -jar selenium-server-standalone-xxx.jar。即可執行該jar包。

技術分享

二、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 。

通過控制條查看啟動的節點信息。

技術分享

三、Remote應用

1、Remote實例

1.1、首先啟動 Selenium Server

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

1.2、編寫自動化測試腳本。

#-*-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 }

.
.
.
.
.

四、參數化平臺及瀏覽器

1、啟動本地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()

2、啟動遠程node

2.1、前置條件:

2.1.1、本地hub主機與遠程node主機之間可以用ping命令連通。

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

2.1.3、遠程主機必須安裝java環境,因為需要運行Selenium Server。

2.2、操作步驟:

2.2.1、啟動本地hub主機,查看主機ip

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

2.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}

五、知識拓展

1、創建startup.bat文件

  在啟動Selenium Server時,每次都要輸入一長串命令,非常麻煩,可以啟動命令生成批處理文件,方法很簡單。首先創建一個startup.bat文件。

  如下圖:

技術分享

2、另外我們還可以通過VisGrid工具來啟動和管理節點,如下圖:

技術分享

3、開機自啟動startup.bat

對於分布式測試遠程主機,如果每次測試前都要人為啟動startup.bat,還是太復雜了。所以想到了開機自啟動,首相想到的是做成service,結果沒有實現成功。

後選擇了開機自啟動。

操作步驟如下。

3.1、添加啟動快捷方式,通過程序->啟動,單擊右鍵,打開所有用戶

技術分享

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

技術分享

3.2、通過運行執行msconfig,打開系統配置

技術分享

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

技術分享

selenium Grid2