軟件測(cè)試 | Selenium Grid作用是什么?Selenium Grid的使用過(guò)程?
SeleniumGrid 作用
Selenium Grid 是 Selenium 的三大組件之一,它可以在多臺(tái)機(jī)器上并行運(yùn)行測(cè)試,集中管理不同的瀏覽器版本和瀏覽器配置。通過(guò)將客戶(hù)端命令發(fā)送到遠(yuǎn)程瀏覽器的實(shí)例, Selenium Grid 允許在遠(yuǎn)程計(jì)算機(jī) (虛擬或真實(shí)) 上執(zhí)行 WebDriver 腳本. 它提供一種在多臺(tái)計(jì)算機(jī)上并行運(yùn)行測(cè)試的簡(jiǎn)便方法。
使用場(chǎng)景
場(chǎng)景一:?實(shí)現(xiàn)分布式執(zhí)行測(cè)試,提高執(zhí)行效率
比如:我們有 1000 條用例執(zhí)行,如果在本機(jī)執(zhí)行,一條用例耗時(shí) 100 秒,執(zhí)行完成則需要大約 27 小時(shí)?1000*100/60/60=27個(gè)小時(shí)
。如果讓這些用例并發(fā)執(zhí)行,比如分配 6 臺(tái)計(jì)算機(jī),每個(gè)計(jì)算機(jī)執(zhí)行 1000/6 大約 166 條用例,那時(shí)間大約節(jié)省了 6 倍,原來(lái)需要大約 27 個(gè)小時(shí),現(xiàn)在可能只需要 4.5 個(gè)小時(shí)左右就基本完成了, 分布式并發(fā)執(zhí)行可以讓我們用例的執(zhí)行總時(shí)長(zhǎng)指數(shù)級(jí)的縮小,從而效率得到很大的提升。
場(chǎng)景二:?解決瀏覽器兼容性問(wèn)題
比如還是 1000 條用例,需要分別在 Chrome、Firefox、Edge、Safari 這些瀏覽器上都執(zhí)行一遍,保證每個(gè)瀏覽器上都能正常執(zhí)行,測(cè)試瀏覽器的兼容性。這時(shí)也可以使用 Selenium Grid,通過(guò) Selenium Grid 將這些請(qǐng)求分發(fā)到不同的系統(tǒng)、不同瀏覽器中執(zhí)行。這些瀏覽器可以分別布署在不同的計(jì)算機(jī)中比如可以布署在 Linux 、Windows、Mac 上都可以,作為它的 Node 結(jié)點(diǎn),從而解決兼容性測(cè)試的問(wèn)題
執(zhí)行過(guò)程

Client
是本地IDEA要執(zhí)行的測(cè)試用例。
1.
Client
的測(cè)試用例通過(guò)HTTP
協(xié)議發(fā)送請(qǐng)求給路由Router
。
Router
是?Selenium Grid
?內(nèi)的一個(gè)處理器/組件,也是Selenium Grid
的入口。
2.
Router
接受請(qǐng)求并立即進(jìn)行分發(fā)。創(chuàng)建一個(gè)新的Session
會(huì)話(huà)同時(shí)分配對(duì)應(yīng)的Node
節(jié)點(diǎn)機(jī)器。
Router
作用:把請(qǐng)求從路由Router
發(fā)送到Node的機(jī)器節(jié)點(diǎn)。
3.路由
Router
進(jìn)行請(qǐng)求分發(fā)。
新請(qǐng)求
接收是一個(gè)新請(qǐng)求時(shí),路由Router
此時(shí)不知往哪個(gè)Node
節(jié)點(diǎn)上發(fā)送該請(qǐng)求。
3.1.1?新請(qǐng)求時(shí),路由
Router
將請(qǐng)求發(fā)送給分發(fā)器Distributor
。
分發(fā)器?Distributor
?讀取Client
腳本的DesiredCapability
屬性,從中獲取用例的?操作系統(tǒng)Platform
?及?瀏覽器browserName
?屬性。
3.1.2?
Distributor
根據(jù)屬性值把請(qǐng)求發(fā)送給符合的?Node節(jié)點(diǎn)?,同時(shí)?創(chuàng)建session
會(huì)話(huà)對(duì)象Session Map
。
Session
會(huì)話(huà)創(chuàng)建時(shí)會(huì)產(chǎn)生一個(gè)Session ID
,分發(fā)器?Distributor
會(huì)把Session ID
與對(duì)應(yīng)的Node
節(jié)點(diǎn)的URI
地址一一對(duì)應(yīng)存儲(chǔ)在?Session Map?中。
3.1.3?
Session Map
會(huì)把Session ID
與對(duì)應(yīng)的Node
發(fā)送給Router
路由,Router
路由再發(fā)送給客戶(hù)端Client
。
會(huì)話(huà)的職責(zé)就是創(chuàng)建一個(gè)簡(jiǎn)單的映射,其中包含正在執(zhí)行的測(cè)試用例的Session會(huì)話(huà)ID及其執(zhí)行的物理機(jī)器Node的地址。
已存在的請(qǐng)求
接收是一個(gè)已存在的請(qǐng)求時(shí),路由Router
直接從Session Map
中根據(jù)對(duì)應(yīng)的Session ID
查找到Node
節(jié)點(diǎn)的URI
地址,把用例請(qǐng)求發(fā)送到對(duì)應(yīng)節(jié)點(diǎn)上直接運(yùn)行即可。
3.2.1?已存在的請(qǐng)求時(shí),路由
Router
將請(qǐng)求根據(jù)Session Map
中對(duì)應(yīng)關(guān)系直接把請(qǐng)求發(fā)送給Node
節(jié)點(diǎn)。
以上是SeleniumGrid的各個(gè)組件之間的執(zhí)行過(guò)程。