分布式系統Selenium GRID的原理及應用
作者 | 汪歡,單位:中國移動智慧家庭運營中心
?Labs 導讀
分布式系統是由一組通過網絡進行通信、為了完成共同的任務而協調工作的計算機節點組成的系統。分布式系統的出現是為了用廉價的、普通的機器完成單個計算機無法完成的計算、存儲任務。其目的是利用更多的機器,處理更多的數據。如上,是分布式系統的概念,在測試系統,也有分布式的應用場景,今天向大家介紹一下基于selenium的分布式測試,Selenium-Grid。
Part 01 什么是Selenium-Grid
Selenium Grid是Selenium的三大組件之一,它的作用就是允許我們在多臺計算機上并行運行測試, 并集中管理不同的瀏覽器版本和瀏覽器配置。
Part 02 Selenium-Grid的使用場景
- 支持在多執行環境進行測試
Selenium Grid支持在多個物理機或者虛擬機(跨平臺、跨瀏覽器)上執行,比如測試節點1為物理機,操作系統為Windows7,瀏覽器為Google Chrome,測試節點2為物理機,操作系統為Linux,瀏覽器為Firefox,測試節點3為基于Dockers的虛擬化環境,瀏覽器為IE8。Selenium-Grid對這三個節點均可以調用。
- 結合多線程技術,在多臺設備并行進行測試,可以有效地減少測試時間
Selenium Grid本身并不支持多線程并發執行,但是可以結合多線程技術,實現測試并發執行。
Part 03 Selenium-Grid的結構
Grid由一個中心(hub)和一到多個節點(Node)組成。
其中,hub節點作為管理節點,用來管理各個代理節點的注冊和狀態信息,并且接收遠程客戶端代碼請求調用,然后把請求的命令再轉發給代理代點來執行。
Node節點就是實際執行任務的節點,即瀏覽器所在的節點,它的主要作用就是注冊到hub節點,并接收hub節點的請求及執行測試。
Part 04 環境搭建
預置配置
Hub和Node節點PC需要部署java環境,且Hub節點與Node節點處于同一個局域網中,且網絡互通,并將selenium grid的jar包下載到PC,下載地址:https://cdn.npm.taobao.org/dist/selenium/3.9/selenium-server-standalone-3.9.1.jar,
配置Hub節點
以Windows系統為例,進入jar包所在目錄,輸入以下命令:
- role:表示此節點為hub節點
- port:表示Hub通過此接口與Node節點進行交互
此時,我們在192.168.1.3這臺PC上創建了Hub節點,我們登陸一下hub節點,查看一下當前Selenium Grid整體的一個狀態,打開http://192.168.1.3:4455/這個頁面,可以看到右下角有個Console鏈接。
點擊console,可以自動跳轉到selenium Grid的控制頁面,顯示如下:
因其他Node節點還未配置,故只能查看當前配置項。
配置Node節點
配置節點一:
同樣的,我們以Windows系統為例,進入jar包所在目錄,輸入以下命令:
命令輸入完成后,可以看到,當前設備已注冊成功,我們再返回到Hub節點,刷新http://192.168.1.3:4455/grid/console頁面,查看Node節點是否注冊成功。
此時,我們可以看到一個IP為192.168.147.1的設備已成功注冊到Hub節點,且這個設備上有三種瀏覽器,分別為firefox、IE、Chrome。
配置節點二:
同樣的,第二臺PC,進入jar包所在目錄,輸入以下命令:
Node節點二,顯示已注冊成功,此時我們登陸Hub,查看注冊情況:
我們在Hub節點可以看到兩個Node節點。
Part 05 驗證效果
現在我們通過Python來驗證以下selenium grid的神奇之處,我們在Hub節點編寫一個自動化腳本,通過在Hub節點來下發任務,由Node節點來實現具體測試。測試的內容為讓Node1節點通過Firefox瀏覽器打開百度網站。
Hub節點上相應的Python腳本及執行結果如下:
Node1節點上命令行的顯示執行的任務如下:
就此,整個完整的小測試已完成,你是不是想自己嘗試操作一遍??