docker+selenium Grid搭建自動化分散式測試環境
自動化測試需要考慮到相容性的時候,之前的做法是每個執行機上安裝不同版本的瀏覽器,實際上這樣做會很浪費硬體資源,現在有了docker容器化技術,讓一切變得簡單。
工具清單:
語言:python 2.7
虛擬機器工作臺:workstations 14
虛擬機器系統:Ubuntu 16.04 LTS
docker:Docker version 17.03.2-ce
自動化測試軟體:selenium
虛擬機器連線工具:xshell
node聯結器:vnc viewer
1、安裝Ubuntu系統
首先安裝一臺Ubuntu系統的伺服器,可以在workstations裡面建立一個虛擬機器,具體百度一下;
2、安裝docker,及獲取映象
虛擬機器建立好了之後使用xshell連線,如果連線不上請參考我的另一篇文章:https://www.cnblogs.com/gcgc/p/9849331.html
2.1 安裝docker
2.2 獲取映象
分別執行下面三行命令,此次我們需要3個映象(1個Hub,2個Node),同時為了可以直觀的看到實驗結果,決定選用自帶VNCServer的debug版本
docker pull selenium/hub docker pull selenium/node-firefox-debug docker pull selenium/node-chrome-debug
如果從官方倉庫獲取慢的話(經測試早上獲取速度還可以),可以使用docker中國的官方映象加速,
docker pull registry.docker-cn.com/selenium/hub
或者使用網易的加速器
新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 來配置 Daemon。
請在該配置檔案中加入(沒有該檔案的話,請先建一個):
{ "registry-mirrors": ["http://hub-mirror.c.163.com"] }
3、 使用映象建立容器
selenium官網提供好的相關映象:
格式為:docker run 引數 映象名
docker run -d -p 5555:4444 --name selenium_hub registry.docker-cn.com/selenium/hub引數解釋: run:使用映象啟動容器; -d: 容器後臺執行; -p: 埠對映,5555是容器宿主機(執行docker的主機)的埠,4444是我們容器(執行selenium_hub虛擬機器)的埠。我們把容器的4444埠對映給docker主機的5555埠,就可以通過docker主機的5555埠來訪問selenium_hub容器了; -P:這裡沒有用到,使用這個引數不用具體指定埠對映,會把容器預設的埠(如:selenium/hub的預設埠為4444,node為:5900)對映到docker主機的一個隨機埠; --link
docker run -d -p 5900:5900 --link selenium_hub:hub --name chrome_node selenium/node-chrome-debug
docker run -d -p 5901:5901 --link selenium_hub:hub --name firefox_node selenium/node-firefox-debug
:
表示新啟動的 container 能通過內部網路與selenium_hub:hub 這個container 進行連線,即 node 能與 hub 建立網路通訊;
--name : 給啟動的容器命名一個別名;
chrome_node:給後面的映象selenium/node-chrome-debug起別名;
selenium/node-chrome-debug:需要啟動容器的映象名;
docker ps -a檢視容器執行狀態
chen@ubuntu:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a3110167a391 selenium/node-chrome-debug "/opt/bin/entry_po..." About an hour ago Up About an hour 0.0.0.0:5902->5900/tcp chrome_node b230ed926f09 selenium/node-firefox-debug "/opt/bin/entry_po..." About an hour ago Up About an hour 0.0.0.0:5901->5900/tcp agitated_jepsen ac2bd2b8912f registry.docker-cn.com/selenium/hub "/opt/bin/entry_po..." 24 hours ago Up About an hour 0.0.0.0:5555->4444/tcp selenium_hub可以訪問 虛擬機器ip:5555/grid/console來驗證容器是否已經註冊到hub,如下 安裝VNC viewer(只有selenium/node-chrome-debug、selenium/node-firefox-debug映象才能使用VNC_viewer工具看到瀏覽器執行介面) vnc viewer是一款優秀的遠端控制工具軟體 官網下載地址:https://www.realvnc.com/en/connect/download/viewer/ 安裝好以後File->New connection,在彈出的介面中輸入node的ip和埠號,儲存後雙擊啟動。 連線,會要求輸入密碼,預設密碼就是secret
出現這個頁面就代表成功連線了
編寫指令碼測試一下
#coding=utf-8 from selenium import webdriver
firefox_capabilities ={ "browserName": "firefox", "version": "62.0.3",#注意版本號一定要寫對 "platform": "ANY", "javascriptEnabled": True, "marionette": True, } browser=webdriver.Remote("http://192.168.179.128:5555/wd/hub",desired_capabilities=firefox_capabilities)#注意埠號5555是我們上文中對映的宿主機埠號 browser.get("http://www.baidu.com") browser.find_element_by_id('kw').send_keys('docker') browser.get_screenshot_as_file("D:/baidu.png") browser.close()
上面firefox_capabilities引數來自於grid/console這裡:
執行指令碼後,可以在VNC中實時看到執行介面
遺留問題:假如需要在不同版本的firefox瀏覽器上去執行指令碼,測試指令碼該怎麼寫,不同火狐版本的映象怎麼獲取,