作為一款一站式的開源持續測試平台,MeterSphere涵蓋了測試跟蹤、接口測試、性能測試和UI測試等功能子產品。MeterSphere的UI測試子產品背景調試使用的是自帶的Selenium-Grid進行測試,而Selenium-Grid需要指定浏覽器的版本,如果需要實作不同版本浏覽器的相容性測試,基于MeterSphere隻需要部署安裝多版本浏覽器的Node,用于執行UI測試腳本即可。
現如今,市面上的浏覽器種類越來越多,這意味着所測試的站點需要在這些浏覽器上都能很好地工作。同時,主流浏覽器(例如IE、Firefox、Chrome、Opera、Safari等)版本更新愈加頻繁,終端使用者甚至不會感覺到這些浏覽器版本的更新。這讓浏覽器相容性測試的工作變得更加重要了,但也使得這種相容性測試變得十分耗時。
通過全覆寫的測試,可以明确地知道目标站點支援哪些浏覽器,而哪些會産生相容性的問題。最簡單的減少浏覽器相容性測試工作量的辦法就是,停止對老版本浏覽器的支援。這個政策對一些公司是适用的,但并不适用于所有公司。
停止對老版本浏覽器的支援,并不意味着目标系統在這些老版本上沒有Bug, 這僅僅是在表面忽略了老版本浏覽器上的潛在問題。MeterSphere平台的UI測試子產品,目前尚未支援同時對多浏覽器進行相容性測試,但是可以在此基礎上通過更靈活的方式進行測試。以下是以Chrome浏覽器為例,在MeterSphere平台實作多版本浏覽器UI相容性測試的具體操作步驟。
一、MeterSphere使用Selenium-Grid執行原理
MeterSphere平台使用的是開源Selenium-Grid元件,其執行流程如下:
■ 對外的入口對應的是Selenium Hub;
■ 具體執行任務的執行機,對應的是Selenium Node;
■ Node接到任務後配置設定給執行節點的過程,就是Selenium Hub将測試配置設定到Selenium Node執行的過程;
■ Node向Hub報備的過程,就是Selenium Node向Selenium Hub注冊的過程;
■ Selenium Hub用來管理各個Selenium Node的注冊資訊和狀态資訊,并且接收遠端用戶端代碼的測試調用請求,并把請求指令轉發給符合要求的Selenium Node執行;
■ Selenium-Grid包含了Selenium-Hub和多個Selenium-Node,是以需要額外安裝多個版本的Chrome浏覽器的Selenium-Node,才可以進行多版本浏覽器相容性測試。
二、擷取多版本的Chrome浏覽器Selenium-Node
檢視https://github.com/SeleniumHQ/docker-selenium/releases?page=1網頁上已經釋出的Release中的鏡像Tag。
Released versions資訊中包含了浏覽器的版本,複制需要測試浏覽器版本的鏡像Tag;
通過複制的Tag資訊,進入MeterSphere伺服器拉取鏡像。
三、啟動對應版本的Chrome浏覽器Selenium-Node
通過執行如下指令,啟動對應版本的Chrome浏覽器Selenium-Node(端口“5555”為容器外部端口,“chrome110”為容器名稱,用于區分不同版本的浏覽器);
#此為Node節點單獨運作,也可以加其他參數或者docker-compose的方式去啟動,具體指令自行百度
docker run -d -p 5555:4444 --name chrome110 --shm-size="2g" selenium/standalone-chrome:4.8.0-20230210
執行結果如下:
四、MeterSphere配置個人資訊的UI測試賬号
在頁面右上角的“使用者名”處的下拉菜單中,點選“個人資訊”選項,進行個人相關資訊配置;
選擇“UI設定”頁籤,填寫UI賬号。
五、執行UI自動化場景
選擇UI自動化場景,點選“本地調試”按鈕;
檢視容器日志;
docker logs -f chrome110 --tail=200
可以看到浏覽器版本為“110”,類型為“Chrome浏覽器”。
六、檢視執行結果
執行日志如下:
執行結果顯示完成:
七、總結
以上就是添加額外浏覽器進行測試的具體步驟,需要注意的事項包括:
■ 如果伺服器不能直接連接配接外網,則需要手動拉取鏡像之後,儲存成tar包再上傳到伺服器;
■ 如果不在“個人資訊”選項中進行相關資訊配置(“步驟三”中啟動的http://IP:Port),也可以在“系統設定”→ “系統參數設定”下修改Selenium-Docker位址,然後選擇“背景調試”選項;
■ 如果使用者在“個人資訊”選項中看不到“UI設定”頁籤,請聯系系統管理者進行授權;
■ 如果要部署多個版本的浏覽器,請注意控制容器外部端口是否沖突。如有沖突,請修改為空閑端口。