docker+selenium Grid搭建自動化分佈式測試環境

自動化測試須要考慮到兼容性的時候,以前的作法是每一個執行機上安裝不一樣版本的瀏覽器,實際上這樣作會很浪費硬件資源,如今有了docker容器化技術,讓一切變得簡單。javascript

工具清單:html

語言:python 2.7java

虛擬機工做臺:workstations 14node

虛擬機系統:Ubuntu 16.04 LTSpython

docker:Docker version 17.03.2-cegit

自動化測試軟件:selenium web

虛擬機鏈接工具:xshellchrome

node鏈接器:vnc viewerdocker

 

一、安裝Ubuntu系統shell

  首先安裝一臺Ubuntu系統的服務器,能夠在workstations裏面建立一個虛擬機,具體百度一下;

二、安裝docker,及獲取鏡像

  虛擬機建立好了以後使用xshell鏈接,若是鏈接不上請參考個人另外一篇文章:https://www.cnblogs.com/gcgc/p/9849331.html

  2.1 安裝docker

    

  2.2 獲取鏡像

    分別執行下面三行命令,這次咱們須要3個鏡像(1個Hub,2個Node),同時爲了能夠直觀的看到實驗結果,決定選用自帶VNC Server的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"] }

 

  

三、 使用鏡像建立容器

   格式爲: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
  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

相關文章
相關標籤/搜索