Selenium 系列篇(八):Docker 分布式搭建
點擊上方“AirPython”,選擇“加為星標”
第一時間關注 Python 技術干貨!
1. 前言
上篇文章 提到可以利用 Selenium Grid 搭建分布式自動化測試環境
由於 Docker 可以高效地利用系統資源,提供一致性運行環境,不需要額外配置,更加方便進行持續集成和持續交付等優勢
所以,在實際項目中,一般會采用 Docker 容器來搭建分布式環境
2.下載鏡像
首先,在服務器下載安裝 Docker CE 免費版本,並配置加速鏡像源,然后重啟 Docker 應用
# 編輯文件,輸入鏡像加速地址
sudo vi /etc/docker/daemon.json
# 輸入地址
# Docker中國官方鏡像加速
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
# 重啟docker
systemctl restart docker
接着,使用 docker pull 命令下載下面 3 個鏡像到本地:
1、selenium/hub:主節點鏡像 hub
2、selenium/node-chrome:node 節點
3、selenium/node-chrome-debug:帶有 VNC 服務端,便於觀看執行步驟
# 主hub
docker pull selenium/hub
# node節點
docker pull selenium/node-chrome
# selenium/node-chrome-debug VNC Server
docker pull selenium/node-chrome-debug
3.運行容器
使用 docker run 命令,可以直接通過鏡像創建一個容器並運行起來
首先,創建並啟動 1 個主 hub 容器,並使用 --name 參數進行重命名
# 主hub
# -P:將容器端口映射到docker主機的一個隨機端口上
# --name:重命名,便於管理
docker run -d -P --name hub_xag selenium/hub
然后,創建並啟動 1 個 Chrome node 節點容器,並使用 -p 參數,將容器的 5900 端口映射到主機的 5903 端口
# node節點
# --link:關聯到hub主節點
docker run -d -p 5903:5900 --link hub_xag:hub --name node1 selenium/node-chrome
最后,創建一個 chrome-debug 容器,並將端口映射到主機的 5900 端口上
# chrome-debug容器
docker run -d -p 5900:5900 --link hub_xag:hub selenium/node-chrome-debug
使用 docker ps -a 命令即可以查看容器的運行狀態及端口映射情況
需要注意的是,如果是部署在服務器,需要配置服務器防火牆和安全組規則
4.查看節點及啟動 VNC
使用 Chrome 打開通過 Docker 主機 IP + Hub 主節點映射的端口號組成的 URL
比如:http://139.199.xx.xx/grid/console
可以很直觀地看到當前 Hub 主節點下所有注冊的 Node 節點列表
然后,在本機上下載安裝 VNC Viewer,打開客戶端軟件
輸入 Docker 主機 IP + chrome-debug 映射在 Docker 主機的端口號,就可以實時查看 Docker 主機的運行情況
比如:http://139.199.xx.xx:5900
需要注意的是,第一次登陸默認的密碼是:secret
5.編寫腳本並運行
隨手編寫一段腳本,將 command_executor 參數中的地址設置為上面 Hub 主節點 IP 地址
from selenium import webdriver
driver = webdriver.Remote(
command_executor='http://139.199.xx.xx:32768/wd/hub',
desired_capabilities={'browserName': 'chrome'}
)
driver.get('https://www.baidu.com')
driver.find_element_by_id("kw").send_keys("歡迎關注公眾號:AirPython")
driver.find_element_by_id("su").click()
print(driver.page_source)
運行腳本,可以發現 VNC Viewer 會展示完整的自動化過程。
6.最后
實際項目中,可以下載 selenium/node-firefox-debug 鏡像,通過鏡像開啟多個容器節點,只要保證端口號不沖突即可。
如此,結合 Docker,Selenium Grid 可以非常方便地創建、管理分布式自動化測試環境。
如果你覺得文章還不錯,請大家點贊分享下。你的肯定是我最大的鼓勵和支持。
留言送書
今日贈書:《Python入門到人工智能實戰》 PS:最近當當有滿 100 減 50 的活動
推薦閱讀
用 Python 分析微信群聊記錄,是怎樣一種體驗?
只需 10 行代碼,Python 教你自制屏幕翻譯工具,高效辦公
為了追到小姐姐,我用 Python 制作了一個機器人
