01
需求背景
日常測試中會遇到對web應用進行UI自動化的測試場景,一般常用的工具是使用Selenium,一套簡單的UI自動化架構如下:
簡單的UI自動化架構
上圖即為簡單搭建的一套UI自動化測試架構,但存在如下缺點:
串行執行測試用例:即同一時刻只啟動一個進程去啟動一個瀏覽器進行測試,有時工作中需要進行瀏覽器的兼容性測試,這樣的話只能等一個進程結束后,再開啟另一個進程開始另一個瀏覽器的測試,效率很低。
一臺機器只能安裝一個版本的瀏覽器:有時兼容性測試不僅要測試不同瀏覽器的情況,還要測試同一瀏覽器不同版本的情況,通常一臺機器只能安裝1個版本的chrome或firefox,這樣就沒辦法測試不同版本的兼容性情況了。
測試腳本與瀏覽器部署在同一臺機器,試想一臺機器既跑測試腳本,又開啟進程啟動瀏覽器進行測試,嚴重消耗機器硬件資源。
為了解決(1)的問題,可以考慮用多線程并發的方式執行測試用例,如下圖
并發測試框架
為了解決(2)和(3)的問題,可以在并發框架的基礎上,采用SeleniumGrid這一分布式測試工具,實現測試腳本和測試執行節點的分離,即用遠程機作為SeleniumNode,在其上安裝不同版本的不同瀏覽器,這樣在本機運行測試腳本后,測試腳本會向SeleniumGrid發起測試請求,SeleniumGrid會尋找當前處于空閑狀態的節點,并在其上執行測試。
整體架構如下:
并發分布式測試框架
至此,這種并發分布式測試框架基本上就可以滿足我們的日常測試需求了,但仍然存在缺點:
(1) 執行節點機配置麻煩:常用的方式就是為每個執行節點配一臺虛擬機,然后在每臺執行節點機上都要重新配置一遍測試環境,最重要的一點是,測試資源很緊張,沒有那么多虛擬機供我們使用。
為了解決(1)的問題,我們需要一臺測試執行節點,需要搭建一臺虛擬機,然后在其上進行環境配置,如果再需要一臺測試執行節點,又要重復上述的過程。一是搭建一臺虛擬機周期較長,虛擬機啟動時間較長,且虛擬機資源依賴于硬件配置,二是每臺虛擬機都要重新配置。
而利用docker可以解決上述問題,其具有以下優點:
docker鏡像不并包含linux內核,多個docker鏡像共用宿主機的linux內核,即相當于我們只要有一個linux內核虛擬機就可以了,可以減少對硬件資源的依賴。
一個docker鏡像可以運行很多docker容器,每個docker容器之間都是物理隔離的。
docker鏡像倉庫里會有其他人已經制作好的相關鏡像,不需要我們自己制作,或者我們把其他人的鏡像拿來,改下某些配置變為我們自己想要的鏡像就ok了
至此,我們可以利用docker的容器來作為UI自動化測試的執行節點,取代之前的虛擬機。
02
框架搭建
基于以上介紹,整體的測試框架如下:
基于docker的多線程并發UI自動化測試框架
框架分為3個部分,多線程并發測試框架采用Python編寫,調用robot framework執行測試用例,并將測試請求發送給docker容器中運行的SeleniumHub,SeleniumHub尋找處于空閑狀態的SeleniumNode執行節點進行web測試,測試結束后,在部署測試腳本的主機上生成各線程運行后的測試報告,再調用robot framework的rebot命令合并測試報告,生成最后的匯總測試報告發布。下面詳細介紹搭建步驟。
03
測試環境搭建
1、安裝docker
(1)win7用戶,進入Docker Toolbox的下載網頁,選擇windows版本下載,win10用戶進入docker官網下載Docker For Windows安裝。
整個安裝過程非常簡單,安裝完成后,可以在桌面得到如下的三個圖標:
win7安裝docker toolbox
(2)設置環境變量
安裝完成后,建議先配置一個環境變量MACHINE_STORAGE_PATH,來自定義虛擬機保存的位置,因為之后下載的鏡像越來越多,都是放在虛擬機的虛擬磁盤文件中,虛擬磁盤文件會越來越大,放在默認的C盤用戶目錄下可能會在以后造成一些麻煩,參考下圖:
設置環境變量
(3)開始使用
點擊Docker Quickstart Terminal圖標,從而打開一個Docker Toolbox terminal,若報如下圖信息,則去https://github.com/boot2docker/boot2docker/releases下載對應版本的boot2docker.iso放到MACHINE_STORAGE_PATH/cache下,再重新打開Docker Quickstart Terminal
下載相應的boot2docker.iso到MACHINE_STORAGE_PATH/cache下
再次打開terminal后,terminal會自動進行一些設置,需要點時間,全部完成后,出現如下結果表示docker安裝ok了:
docker啟動ok
另外,我們可以記下docker宿主機的IP 192.168.99.100,可以用xshell來ssh登錄docker宿主機方便操作,賬號和密碼是docker/tcuser:
xshell連接docker宿主機
2、下載或制作相關鏡像
docker pull selenium/hub,它會自動從鏡像源中下載別人制作好的最新的selenium/hub鏡像,可以通過docker images看到下載好的selenium/hub鏡像
selenium/hub鏡像
對于seleniumnode鏡像,兼容性測試時,需要我們覆蓋更多版本的瀏覽器,所以,可以選擇自己制作Dockerfile來生成自己想要的瀏覽器版本的鏡像。
然后通過如下命令來構建鏡像,其中selenium/vnc-node-firefox-debug是自己起的鏡像名,后面的.表示Dockerfile所在的目錄為當前目錄:
docker build -t selenium/vnc-node-firefox-debug .
用同樣的方法可以生成chrome瀏覽器的鏡像,生成后的鏡像如下圖:
selenium-node-chrome/firefox鏡像
3、啟動容器
(1)啟動selenium/hub容器
docker run -p 5555:4444 -d --name 'selenium_hub' selenium/hub
run:通過鏡像啟動一個容器
-p:端口映射,5555是容器宿主機(運行docker的主機)的端口,4444是我們容器(運行selenium_hub虛擬機)的端口。我們把容器的4444端口映射給docker主機的5555端口,就可以通過docker主機的5555端口來訪問selenium_hub容器了
(2)啟動selenium/node容器
docker run -P -d --link selenium_hub:hub selenium/vnc-node-firefox-debug
docker run -P -d --link selenium_hub:hub selenium/vnc-node-chrome-debug
-P:隨機生成映射端口號,上文中的-p是指定特定的端口號,這里node并不需要知道容器內部的端口號,所以隨機映射即可
--link:指定selenium-node容器依賴容器selenium_hub
容器啟動完后,可通過docker ps查看啟動的容器
在瀏覽器中查看selenium容器是否正常啟動,http://192.168.99.100:5555/grid/console
selenium容器啟動成功
04
多線程并發測試框架搭建
采用Python編寫多線程并發程序,robot framework執行測試用例。
1、測試用例
在robot framework中,將測試用例打上標簽tag,來區分要測試的不同版本的不同瀏覽器,remote_url為selenium_hub容器的地址,已將該容器的4444端口映射到docker宿主機的5555端口,所以這里直接通過宿主機的5555端口訪問hub容器。
測試用例
2、多線程并發框架
多線程并發框架采用Python編寫,程序目錄如下:
各文件代碼如下:
utils.py:
utils.py
utils.py
multiThreadings.py
multiThreadings.py
callRobot.py
callRobot.py
callRobot.py
run.py
run.py
腳本run.py接收兩個參數,第1個參數為要執行的robot測試套件,第2個參數為要執行的robot用例的標簽,各標簽之間以逗號分隔,有多少個標簽,就啟動多少個線程來調用robot的pybot命令執行打上相應標簽的測試用例。
05
運行
這里開啟2個node節點,一個chrome,一個firefox。
cmd下執行腳本,robot測試套件名為TestSuite.txt,執行標簽為chromeNode1,firefoxNode1的測試用例:
python run.py TestSuite.txt selenium_node=chromeNode1,firefoxNode1
docker宿主機下,執行docker logs -f selenium_hub,可以查看hub容器的執行日志:
selenium_hub容器日志
通過vnc viwer可視化查看node容器內瀏覽器的運行情況:
node容器內瀏覽器運行情況
最終用rebot命令合并各線程生成的測試報告,合并后的報告如下:
合并報告
至此,基于docker的selenium并發web應用UI自動化測試框架搭建完成。之后,自己會再探究將docker容器的創建,啟動和停止自動化,實現測試環境的自動化搭建
審核編輯 :李倩
-
自動化
+關注
關注
29文章
5620瀏覽量
79564 -
虛擬機
+關注
關注
1文章
931瀏覽量
28381 -
Docker
+關注
關注
0文章
492瀏覽量
11939
原文標題:城會玩!Selenium+Docker成功解決這一大難題!
文章出處:【微信號:全棧軟件測試在線,微信公眾號:全棧軟件測試在線】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論