Selenium Grid 分布式 | 介紹與實戰(zhàn)


1. 介紹

Selenium 包含 3 大組件,分別是:Selenium IDE、Selenium WebDriver、Selenium Grid

其中,Selenium IDE 負責錄制、回放腳本,模擬用戶對頁面的真實操作

Selenium WebDriver 提供 API 來操作瀏覽器,比如:Chrome、FireFox、IE 等

Selenium Grid 用于分布式自動化測試,通過控制多臺機器、多個瀏覽器并行執(zhí)行測試用例,在測試用例比較多的情況下比較實用。

2.安裝

要使用 Selenium Grid 完成分布式,首先需要安裝 Selenium Server 的 Jar 文件


下載地址如下:

https://www.selenium.dev/downloads/

接著,配置 JDK 運行環(huán)境

最后,通過命令行啟動 Selenium Grid Server

# 運行Selenium Grid
# 注意:確保先安裝JDK環(huán)境
java -jar selenium-server-standalone-3.141.59.jar
3. 主節(jié)點和代理節(jié)點

Selenium Grid 分布式測試是由一個主節(jié)點( Hub )、多個代理節(jié)點( Node )組成

其中,Hub 用來管理 Node 代理節(jié)點的注冊、狀態(tài)信息,接受客戶端代碼的調(diào)用,將命令分發(fā)給 Node 來執(zhí)行

通過 -role 參數(shù),指定 hub 或 node,來啟動主節(jié)點和代理節(jié)點,默認 Hub 的端口號是 4444,node 的端口號是 5555

需要注意的是,如果在一臺 PC 上啟動多個 Node,需要利用 -port 參數(shù)顯式指定不同的端口號

# 啟動一個主節(jié)點Hub
# 參數(shù):-role hub
java -jar selenium-server-standalone-3.141.59.jar -role hub

# 啟動多個代理節(jié)點
# 注意:如果在同一臺機器上,需要利用 -port 定義不同的端口號
java -jar selenium-server-standalone-3.141.59.jar -role node -port 5555
java -jar selenium-server-standalone-3.141.59.jar -role node -port 6666
java -jar selenium-server-standalone-3.141.59.jar -role node -port 7777
最后,在瀏覽器中輸入下面的地址,即可以進行控制臺

http://127.0.0.1:4444/grid/console

界面和命令行可以看到 3 個 Node 已經(jīng)注冊到 Hub 成功



需要注意的是,如果 Node 代理節(jié)點不在本地,需要在對應 PC 上配置 JDK 環(huán)境,運行 Selenium Server 及瀏覽器驅(qū)動。

比如:本地 Hub 主節(jié)點的 IP 地址為 192.168.1.101,Node 代理節(jié)點的 IP 地址為 192.168.1.102

那么 Node 啟動必須使用 -hub 參數(shù)顯式指定 Hub 進行注冊:

# 啟動一個主節(jié)點Hub
# IP地址:192.168.1.101
java -jar selenium-server-standalone-3.141.59.jar -role hub

# 啟動遠程Node代理節(jié)點并進行注冊
# IP地址:192.168.1.102
java -jar selenium-server-standalone-3.141.59.jar -role node -port 5555 -hub http://192.168.1.101:4444/grid/register/
4. 實戰(zhàn)

實際項目中,使用 Selnium Grid 完成分布式的操作步驟如下:

第 1 步,在本機啟動一個 Hub 主節(jié)點,可以顯式指定端口號,或者保持默認的:4444

# 啟動一個hub
java -jar selenium-server-standalone-3.141.59.jar -role hub
第 2 步,在本地或遠程啟動多個 Node 代理節(jié)點

需要注意的是,同一 IP 地址,端口號不能相同

# 啟動一個代理節(jié)點Node
# 注意:同一IP地址,端口號不能相同
java -jar selenium-server-standalone-3.141.59.jar -role node -port 5555 -hub  http://192.168.1.101:4444/grid/register/
第 3 步,編寫測試用例,以打開 Google 為例

利用 Selenium WebDriver 的 Remote() 方法,通過 desired_capabilities 參數(shù)指定瀏覽器驅(qū)動

from time import sleep

from selenium.webdriver import Remote,DesiredCapabilities

# 指定Hub主機及瀏覽器驅(qū)動
driver = Remote(
    command_executor='http://192.168.183.1:4444/wd/hub',
    desired_capabilities=desired_capabilities=DesiredCapabilities.CHROME.copy())

driver.get('http://google.com')

sleep(10)

driver.quit()
第 4 步,運行測試腳本

運行上面的測試腳本,Hub 主節(jié)點會自動分配到滿足條件的 Node 節(jié)點去運行





作者:星安果


歡迎關(guān)注微信公眾號 :Python測試社區(qū)