docker selenium 分佈式

 

 

from:https://www.cnblogs.com/nanaheidebk/p/10109013.html

1.記錄下學習中遇到的坑,當做學習筆記。
2.有前人路過看到文章中比較落後的做法,請務必一定要指教。(因爲是初學者視角,很多東西只是走通而已,不足的地方多的去了,無論誰的指教都會讓我受益匪淺)
3.因爲我就是一個初學者,所以我打算詳細的記錄操作步驟,爭取和我一樣的初學者看着這篇文章就可以成功搭建測試環境。

項目背景:
我負責的自動化web測試框架已經搭建完成了。框架主要主要使用了:
語言:python
測試框架:pytest
web自動化:selenium
報告框架:allure
CI集成:jenkins

引入docker的目的:
優化自動化測試框架。當case在單個瀏覽器上走通了以後,就開始考慮是否需要考慮下兼容性,反正都是機器跑,跑一個瀏覽器是跑,跑二個也是跑。剛開始的時候打算用Selenium Standalone Server解決這個問題,但是在社區裏看到了docker文章。立刻被吸引到了,通過docker 啓動容器創建一個乾淨的測試環境,把外界因素對自動化測試的干擾降至最低。自動化測試穩定纔是王道。

目標:
1.成功搭建docker結合selenium構建分佈式測試環境。
2.編寫腳本執行web的自動化測試分佈式測試。

1.安裝docker

以前docker必須安裝太linux系統上的,不過最近docker發佈了windows的版本,至少讓我這種沒有linux操作環境的人也能使用docker。
去docker官網下載dockerToolbox.exe,然後直接安裝即可。這個完全沒有難度。
然後在啓動或者找快捷方式 Docker Quickstart Terminal ,打開docker的terminal。
第一次啓動可能花費很長時間,耐心等待即可。看到下圖就說明我們可以開始使用docker了。

 

 

2.獲取docker鏡像

按照我對docker理解,初學者就直接認爲docker是一種輕量級的虛擬機,然後在虛擬機裏搭建各種環境,在需要的時候,直接啓動即可。docker的根本就是鏡像,任何操作的來源都是從鏡像開始的,找到合適我們自己項目的鏡像就可以了。
我們可以去docker的公共倉庫找一些已經做好的鏡像。
輸入命令
docker search selenium
我們可以在公共倉庫裏找到關於selenium的鏡像。
既然是分佈式測試,那麼我們就需要hub,node。合適我們的鏡像就被我們找到了。
hub:selenium/hub
node:selenium/node-firefox , selenium/node-chrome
node有兩種,一個是firefox,一個chrome。看來這兩種瀏覽器是現在的主流,當然如果我們在將來的工作需要在docker上進階,我們自己也可以構建ie之類的鏡像,那就是後話了。
輸入命令
docker pull selenium/hub
docker pull selenium/node-firefox
docker pull selenium/node-chrome
如果下載鏡像不成功,就多試幾次,再不行就翻牆再下載。
全部下載完成以後
輸入命令
docker images
查看鏡像列表

 

如上圖顯示的話,基本上就成功了。

 

3.運行docker鏡像

我們已經下載好了docker的鏡像,接下來就是運行鏡像,在docker的世界裏叫做啓動容器,通俗點就是啓動了虛擬機。

3.1啓動selenium-hub

輸入命令
docker run -p 5555:4444 -d --name hub selenium/hub
輸入命令
docker ps
可以看到以下內容

 

我來解釋下基本命令
run 是讓我們運行一個鏡像,創建出一個容器。
運行的鏡像名字叫做selenium/hub
-p 5555:4444 這個是把容器裏的端口映射出來,讓別人可以訪問。
-d 在後臺運行
--name 給這個容器起一個容易明白的名字,這裏我就直接把這個容器成爲hub。

 

3.2啓動selenium-node

輸入命令
docker run -P -d --link hub:hub --name firefox selenimu/node-firefox
docker run -P -d --link hub:hub --name chrome selenimu/node-chrome
--link 是鏈接別名爲hub的容器

輸入命令docker ps

 

 

然後在本機的瀏覽器中輸入
http://192.168.99.100:5555/grid/console

 
這個頁面相信大家都熟悉了。就是用java 去啓動selenium-server-standalone-×××.jar,然後註冊node到selenium-server上。
然而我們現在用docker+selenium 也做到了這點。

 

輸入命令
docker logs hub

 
我們可以通過logs 查看hub容器內的日誌。上圖顯示在hub上註冊了兩個node

4.運行測試腳本

# coding=utf-8

from selenium import webdriver
chrome_capabilities ={
"browserName": "chrome",
"version": "",
"platform": "ANY",
"javascriptEnabled": True,
# "marionette": True,
}
browser = webdriver.Remote("http://192.168.99.100:5555/wd/hub", desired_capabilities=chrome_capabilities)
browser.get("http://www.163.com")
browser.get_screenshot_as_file(r"D:/sample/chrome.png")
browser.quit()

這是一個典型的python的selenium腳本調試命令。
其中要注意的的以前在本機調試我們都是
browser = webdriver.Chrome()
但是我們現在node和hub的概念,所以我們在定義webdriver的時候是定義在hub上的。所以我們看到了
webdriver.Remote("http://192.168.0.1:5555/wd/hub", desired_capabilities=chrome_capabilities)

在本機上運行改腳本,沒有很大問題應該會在制定的目錄生成一張快照,證明我們腳本的確跑起來了。

5.debug模式

我們在運行docker的時候是看不到任何界面的,但是有的時候爲了 debug方便,我們需要看容器裏到底在幹什麼。
所以,docker-selenium提供了debug模式。

首先我們要去下載debug專用的鏡像
輸入命令
docker pull selenium/node-chrome-debug
docker pull selenium/node-firefox-debug
如果如要本地調試的鏡像
docker pull selenium/standalone-chrome-debug
docker pull selenium/standalone-firefox-debug

輸入命令
docker run -d -p 5900:5900 --link hub:hub selenium/node-chrome-debug
我們在創建了node 容器的同時把接口5900暴露出來了。
那麼我們現在就要使用vnc進行連接。
我選擇了vnc viewer

 

如圖所示,vnc server 輸入docker的ip加上容器暴露出來的接口5900
連接,會要求輸入密碼,默認密碼就是secret
進入vnc viewer 就可以看到以下Ubuntu系統的圖形界面。會linux的人肯定不會陌生。
 

 

在運行我們前面的調試腳本,這次就會在vnc viewer中的看到selenium整個操作過程。

以上我們應該就已經把selenium結合docker構建分佈式測試環境配置好了,debug模式也配置好了。


 

 

 
好文要頂 關注我 收藏該文  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章