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

一種實(shí)時(shí)多線程VSLAM框架vS-Graphs介紹

基于 Docker 與 Jenkins 實(shí)現(xiàn)自動(dòng)化部署

通用自動(dòng)化測(cè)試軟件 - TAE

串口屏自動(dòng)化測(cè)試
Flexus X 實(shí)例 Docker+Jenkins+gitee 實(shí)現(xiàn) CICD 自動(dòng)化部署 - 解放你的雙手~

自動(dòng)化創(chuàng)建UI并解析數(shù)據(jù)
自動(dòng)化創(chuàng)建UI并解析數(shù)據(jù)
自動(dòng)化實(shí)踐之:從UI到接口,Playwright給你全包了!

socket 多線程編程實(shí)現(xiàn)方法
Python中多線程和多進(jìn)程的區(qū)別

探索Playwright:前端自動(dòng)化測(cè)試的新紀(jì)元
開關(guān)電源自動(dòng)化測(cè)試設(shè)備:如何實(shí)現(xiàn)自動(dòng)化測(cè)試?

OTA自動(dòng)化測(cè)試解決方案——實(shí)車級(jí)OTA測(cè)試系統(tǒng)PAVELINK.OTABOX

使用 GPT4V+AI Agent 做自動(dòng) UI 測(cè)試的探索

評(píng)論