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ū)