1. 程式人生 > 實用技巧 >docker+selenium Grid搭建自動化分散式測試環境

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 
  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
  引數解釋:   run:使用映象啟動容器;   -d: 容器後臺執行;   -p: 埠對映,5555是容器宿主機(執行docker的主機)的埠,4444是我們容器(執行selenium_hub虛擬機器)的埠。我們把容器的4444埠對映給docker主機的5555埠,就可以通過docker主機的5555埠來訪問selenium_hub容器了;   -P:這裡沒有用到,使用這個引數不用具體指定埠對映,會把容器預設的埠(如:selenium/hub的預設埠為4444,node為:5900)對映到docker主機的一個隨機埠;   --link:表示新啟動的 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瀏覽器上去執行指令碼,測試指令碼該怎麼寫,不同火狐版本的映象怎麼獲取,

以上問題可先參考(http://www.51testing.com/html/60/n-3717560-2.html