M2:10.13.181.2
Docker Engine 從 V1.12.0 版本開始,原生集成了 Docker Swarm,所以只要在每臺機器上安裝 Docker,就可以直接使用 Docker Swarm。在這里,關(guān)于 Docker 的安裝不再詳細介紹,請按照官方 Docker Swarm 文檔 進行安裝。安裝完成后,在每臺機器上將 Docker 服務(wù)啟動。
提示:
注意:最好關(guān)閉機器上的防火墻,否則可能會出現(xiàn) Swarm 集群網(wǎng)絡(luò)連接問題。
關(guān)閉防火墻的命令:systemctl stop firewalld.service
禁止防火墻開機啟動命令:systemctl disable firewalld.service
步驟
1、創(chuàng)建管理節(jié)點。
我們將機器 M1 作為 manager 節(jié)點,在這臺機器上執(zhí)行命令來初始化集群環(huán)境。命令如下:
sudo docker swarm init --advertise-addr 10.13.181.1
執(zhí)行此命令后,會返回一個用于加入集群的令牌(Token),以便其他 worker 加入此集群。
清單 1. 加入集群令牌示例:
復(fù)制代碼 代碼如下:docker swarm join –token SWMTKN-1-5p3kzxhsvlqonst5wr02hdo185kcpdajcu9omy4z5dpmlsyrzj-
3phtv1qkfdly2kchzxh0h2xft 10.13.181.1:2377
如果想再次獲取加入集群的命令,可以通過執(zhí)行以下命令獲?。?/p>
sudo docker swarm join-token worker
2、將機器 M1 也作為 worker 節(jié)點添加到集群。
在 manager 節(jié)點機器上運行清單 1 的命令,即可將機器 M1 也作為 worker 加入 swarm 集群當中。
3、將另一臺機器 M2 作為 worker 節(jié)點添加到集群。
在機器 M2 上執(zhí)行上述清單 1 中的命令,即可實現(xiàn) M2 加入集群的功能。
4、運行如下命令創(chuàng)建集群網(wǎng)絡(luò):
sudo docker network create -d overlay seleniumnet
這里,seleniumnet 即是我們所創(chuàng)建的集群網(wǎng)絡(luò)名稱。
5、在新建的集群網(wǎng)絡(luò)上創(chuàng)建 Selenium Grid 服務(wù)。
a. 創(chuàng)建 Selenium Grid Hub 服務(wù)。基于集群網(wǎng)絡(luò) seleniumnet,將 4444 端口映射到集群的 4444 端口,將 timeout 時間設(shè)置為 120 秒,可以增大或減少 timeout 時間,如清單 2 所示。
清單 2. 創(chuàng)建 Selenium Grid Hub 服務(wù):
復(fù)制代碼 代碼如下:sudo docker service create –name selenium-hub –network seleniumnet -p 4444:4444 -e
GRID_TIMEOUT=120 selenium/hub
b. 創(chuàng)建 Selenium Grid Firefox 節(jié)點服務(wù)并連接到剛創(chuàng)建 Hub 服務(wù)。如清單 3 所示。
清單 3. 創(chuàng)建 Selenium Grid Firefox 節(jié)點服務(wù):
sudo docker service create \\\\ --name node-firefox \\\\ --replicas 5 \\\\ -p 7900:5900 \\\\ --network seleniumnet \\\\ -e HUB_PORT_4444_TCP_ADDR=selenium-hub \\\\ -e HUB_PORT_4444_TCP_PORT=4444 \\\\ selenium/node-firefox-debug bash -c \\\'SE_OPTS=-host $HOSTNAME /opt/bin/entry_point.sh\\\'
參數(shù)說明:
-p: 7900:5900 將 Docker 內(nèi)部 VNC5900 暴露到宿主機的 7900 端口,使得用戶可以通過 VNC 從外面監(jiān)控 Docker 內(nèi)部的執(zhí)行情況。
c. 創(chuàng)建 Selenium Grid Chrome Node 服務(wù)并連接到剛創(chuàng)建 Hub 服務(wù)。如清單 4 所示。
清單 4. 創(chuàng)建節(jié)點服務(wù):
sudo docker service create \\\\ --name node-chrome \\\\ --replicas 3 \\\\ -p 7901:5900 \\\\ --network seleniumnet \\\\ -e HUB_PORT_4444_TCP_ADDR=selenium-hub \\\\ -e HUB_PORT_4444_TCP_PORT=4444 \\\\ selenium/node-chrome-debug bash -c \\\'SE_OPTS=-host $HOSTNAME /opt/bin/entry_point.sh\\\'
參數(shù)說明:
-p: 7901:5900 將 Docker 內(nèi)部 VNC5900 暴露到宿主機的 7901 端口,使得用戶可以通過 VNC 從外面監(jiān)控 Docker 內(nèi)部的執(zhí)行情況。
6、檢查環(huán)境搭建是否成功。在機器 M1 上執(zhí)行以下命令,查看每個服務(wù)是否啟動成功:
sudo docker service ls
可以看到 Selenium Hub 和 Firefox 節(jié)點、Chrome 節(jié)點都已經(jīng)成功啟動。Firefox 的節(jié)點副本是 5,Chrome 的節(jié)點副本是 3,如圖 2 所示。
圖 2. Docker 服務(wù)清單
我們再通過任意一臺機器的 IP 加 4444 端口來打開 Selenium Hub URL 來查看已啟動的 Firefox 和 Chrome 節(jié)點是否已經(jīng)成功掛載到 Hub 節(jié)點上,如圖 3 所示。
Hub url: 10.13.181.1:4444
圖 3. Selenium Hub 的界面圖
從圖 3 可以看出,5 個 Firefox 節(jié)點和 3 個 Chrome 節(jié)點都已經(jīng)成功掛載到 Hub 節(jié)點上。說明此時 Docker Swarm 環(huán)境里已經(jīng)提供了 5 個 Firefox 節(jié)點和 3 個 Chrome 節(jié)點可以用來執(zhí)行 Selenium 自動化測試腳本。
擴容方法
用戶可以根據(jù)腳本執(zhí)行數(shù)量,隨時動態(tài)的擴容各個節(jié)點的數(shù)量,提高自動化腳本的執(zhí)行效率,例如我們需要 10 個可以運行 Firefox 瀏覽器的 Container,對應(yīng)的命令如下:
sudo docker service scale node-firefox=10
在 Docker Swarm 運行 Jenkins Job
用戶在 Docker Swarm 中運行 Jenkins Job,并不需要在 Jenkins 做多余的配置,而是需要在對應(yīng)的自動化腳本中調(diào)用 Selenium Hub,從而以遠程的方式調(diào)用 WebDriver。這樣就實現(xiàn)了在 Docker Container 中運行 Selenium 腳本。
以本文中的場景為例,只需要在自動化腳本中調(diào)用遠程 Selenium Hub 即可,如下所示:http://9.111.139.104:4444/wd/hub
在 Selenium Grid 中運行自動化腳本
基本概念
Selenium Grid,用于分布式自動化測試,也就是說一套 Selenium 代碼可在不同的環(huán)境上運行,這樣做可以方便的將應(yīng)用運行在 Docker 所提供的不同 Container 中。
Selenium Grid 有兩個概念:
Hub:主節(jié)點,你可以看作總調(diào)度中心。
Node:分支節(jié)點,你可以看作是真正執(zhí)行任務(wù)的 worker。
也就是說在 Selenium Grid 中只能有一個主 Hub,但可以在本地或遠程建立 N 多個分支節(jié)點,測試腳本指向主 Hub,由主 Hub 分配給本地/遠程節(jié)點運行測試用例。
實現(xiàn)方式
要實現(xiàn)在 Selenium Grid 中運行自動化腳本,首先我們要創(chuàng)建一個 remote driver 的對象,可以通過圖 4 源碼實現(xiàn),截圖中所對應(yīng)的輸入?yún)?shù) selhub 是 Selenium hub 的 URL:http://9.111.139.104:4444/wd/hub
圖 4. 自動化腳本的代碼截圖
通過調(diào)用上述的 driver,就可以實現(xiàn)將自動化腳本運行在 Docker Container 中。
結(jié)束語
在持續(xù)集成測試中,將測試部署到 Docker Swarm 中,通過 Selenium Grid 自動分配執(zhí)行測試的節(jié)點,可以提升測試效率,增大測試的范圍,在快速迭代中能夠更好的保證所交付的產(chǎn)品質(zhì)量,節(jié)省測試資源。
原文鏈接: https://www.ibm.com/developerw … .html
更多關(guān)于云服務(wù)器,域名注冊,虛擬主機的問題,請訪問西部數(shù)碼官網(wǎng):ps-sw.cn