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


1. 介紹

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

其中,Selenium IDE 負(fù)責(zé)錄制、回放腳本,模擬用戶對頁面的真實(shí)操作

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

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

2.安裝

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


下載地址如下:

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

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

最后,通過命令行啟動(dòng) Selenium Grid Server

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

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

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

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

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

# 啟動(dòng)一個(gè)主節(jié)點(diǎn)Hub
# 參數(shù):-role hub
java -jar selenium-server-standalone-3.141.59.jar -role hub

# 啟動(dòng)多個(gè)代理節(jié)點(diǎn)
# 注意:如果在同一臺機(jī)器上,需要利用 -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
最后,在瀏覽器中輸入下面的地址,即可以進(jìn)行控制臺

http://127.0.0.1:4444/grid/console

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



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

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

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

# 啟動(dòng)一個(gè)主節(jié)點(diǎn)Hub
# IP地址:192.168.1.101
java -jar selenium-server-standalone-3.141.59.jar -role hub

# 啟動(dòng)遠(yuǎn)程N(yùn)ode代理節(jié)點(diǎn)并進(jìn)行注冊
# 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. 實(shí)戰(zhàn)

實(shí)際項(xiàng)目中,使用 Selnium Grid 完成分布式的操作步驟如下:

第 1 步,在本機(jī)啟動(dòng)一個(gè) Hub 主節(jié)點(diǎn),可以顯式指定端口號,或者保持默認(rèn)的:4444

# 啟動(dòng)一個(gè)hub
java -jar selenium-server-standalone-3.141.59.jar -role hub
第 2 步,在本地或遠(yuǎn)程啟動(dòng)多個(gè) Node 代理節(jié)點(diǎn)

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

# 啟動(dòng)一個(gè)代理節(jié)點(diǎn)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ū)動(dòng)

from time import sleep

from selenium.webdriver import Remote,DesiredCapabilities

# 指定Hub主機(jī)及瀏覽器驅(qū)動(dòng)
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 步,運(yùn)行測試腳本

運(yùn)行上面的測試腳本,Hub 主節(jié)點(diǎn)會自動(dòng)分配到滿足條件的 Node 節(jié)點(diǎn)去運(yùn)行





作者:星安果


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