軟件測(cè)試 | Selenim-Grid架構(gòu)
Selenium-Grid是基于傳統(tǒng)Selenium架構(gòu)發(fā)展起來(lái)的,它有如下優(yōu)點(diǎn):
1.Selenium測(cè)試案例、待測(cè)Web應(yīng)用系統(tǒng)、Remote Control/瀏覽器組合之間無(wú)須緊密耦合。它們之間通過(guò)HTTP進(jìn)行通信,因此不需要工作在一臺(tái)機(jī)器上。
2.Selenium測(cè)試案例和待測(cè)Web應(yīng)用系統(tǒng)與具體項(xiàng)目相關(guān)。不過(guò),無(wú)論Selenium Remote Control還是瀏覽器都與具體項(xiàng)目無(wú)關(guān)。事實(shí)上,它們可以在不同應(yīng)用和項(xiàng)目間進(jìn)行共享。
因此,只有通過(guò)建立一個(gè)基于Selenium Remote Control的網(wǎng)絡(luò),我們才能在不同版本、不同應(yīng)用、不同項(xiàng)目,甚至于不同組織間共享測(cè)試平臺(tái)。當(dāng)然我們同樣會(huì)面對(duì)前面提到的傳統(tǒng)Selenium架構(gòu)所面臨的局限。這就解釋了為什么我們需要一個(gè)全新組件,來(lái)解決如下問(wèn)題:
如何透明地向測(cè)試案例指派一個(gè)Selenium Remote Control;
克服每個(gè)Remote Control支持的并發(fā)測(cè)試案例個(gè)數(shù)限制;
屏蔽測(cè)試案例對(duì)于測(cè)試平臺(tái)架構(gòu)的依賴
Selenium-Grid將這一組件稱為Selenium Hub.
1.Hub擁有一個(gè)與傳統(tǒng)Remote Control一模一樣的對(duì)外接口。這就意味著測(cè)試案例集可以透明地選擇一個(gè)傳統(tǒng)Remote Control或者Selenium Hub,而無(wú)須為此更該代碼,唯一需要改變的就是IP地址。它能屏蔽測(cè)試案例對(duì)網(wǎng)絡(luò)基礎(chǔ)架構(gòu)(你可以對(duì)其進(jìn)行擴(kuò)展)的依賴,這一點(diǎn)很重要,它同樣能夠減輕測(cè)試人員的工作量。同樣的測(cè)試案例,既可以在測(cè)試人員的辦公機(jī)器上運(yùn)行,也可以在網(wǎng)絡(luò)分布式網(wǎng)絡(luò)上運(yùn)行,而不需要改變?nèi)魏我恍写a。
2.Hub會(huì)為每一個(gè)測(cè)試案例分配Selenium Remote Control。Hub同樣負(fù)責(zé)來(lái)自測(cè)試案例的Selenium命令,路由至正確的Remote Control。同時(shí)它還會(huì)不斷底跟蹤測(cè)試進(jìn)程。
3.當(dāng)一個(gè)新測(cè)試啟動(dòng)后,如果Hub找不到符合測(cè)試要求的Remote Control,它就會(huì)暫存收到請(qǐng)求。一旦符合要求的Remote Control資源被釋放,Hub就會(huì)立即響應(yīng)這一請(qǐng)求。對(duì)于整個(gè)測(cè)試流程而言,測(cè)試案例并不需要知道Grid內(nèi)部發(fā)生了什么;它需要做的僅僅是等待HTTP響應(yīng)。
Selenium Grid的架構(gòu)簡(jiǎn)圖如圖8-2所示。

想要發(fā)揮Selenium-Grid的優(yōu)勢(shì),你必須并行地運(yùn)行測(cè)試案例。如果使用Java來(lái)編寫Selenium測(cè)試阿里,你可以選擇TestNG parallel runs或者Parallel JUnit。如果你更喜歡Ruby,那么應(yīng)該了解一下DeepTest或者spawn。總之,依賴于你選擇的變成語(yǔ)言和開發(fā)平臺(tái)是否提供并行執(zhí)行測(cè)試案例的解決方案。