天天看點

菜鳥學自動化測試(七)----selenium RC 工作原理

關于selenium rc環境搭建(基于java語言),我在系統的學習selenium之前就已經做了,并在我的這個系列的文章中可以找到。那是照着一位前輩的視訊操作完成的,我詳細的記錄的操作步驟。

在這裡我們一起了解一下selenium rc的工作原理。

簡介

那麼之前學習的了selenium ide與selenium指令,那麼是不是我們用selenium ide就可以完成我們的所有自動化測試工作了呢?no !selenium ide 沒我們認為的那麼強大,在實際的項目中會有各種複雜的操作,如條件判斷、循環、讀寫檔案、查詢資料庫和e—mail郵寄測試報告。這些都不是selenium ide簡單的錄制就能完成的。

selenium rc可以适應更複雜的自動化測試需求,而不僅僅是簡單的浏覽器操作和線性執行。selenium rc 能夠充分利用程式設計語言來建構更複雜的自動化測試案例。

selenium rc工作原理

那麼selenium rc元件是如何運轉的,以及他們在測試案例運作過程中扮演什麼角色。

菜鳥學自動化測試(七)----selenium RC 工作原理

說明用戶端庫檔案将指令傳遞給server。接着server使用selenium-core的javascript指令傳遞給浏覽器,浏覽器會使用自帶的javascript翻譯器來執行selenium指令。這意味着測試腳本中的selenese操作和驗證将被執行。

* selenium server

它負責啟動和關閉浏覽器,解釋和運作從測試程式傳來的selenese指令,就像http代理一樣,截取和驗證浏覽器與待測應用(aut)之間的http消息。

在測試程式打開浏覽器時(使用用戶端庫檔案的api函數),rc server綁定 selenium core并自動将它嵌入到浏覽器中。selenium core是一個javascript程式,實際上市一系列javascript函數,它們使用浏覽器内置的javascript翻譯器來翻譯和執行selenese指令。

* 用戶端檔案

用戶端庫檔案提供程式設計接口。允許你使用自己編寫的程式來運作selenese指令,對于不同的語言都有對應的用戶端庫檔案。類似于資料庫方言包的概念,如果你想用java操作資料庫,對于不同的資料庫,需要導入不同的資料庫驅動jar檔案,mysql有mysql的方言包,db有db的方言包。

用戶端庫檔案擷取一條selenise指令,并将它傳遞給selenium server ,以便執行一個指定操作或者基于待測應用(aut)進行測試。用戶端庫檔案收到指令的執行結果,在将其傳給你的測試程式。程式接收到結果後,将它儲存在變量中。接着報告成功還是失敗,如果結果是意料之外的失敗,還能有針對性地采取正确措施。

是以要建立測試程式,你隻要使用用戶端庫檔案的api來編寫程式,程式會去運作一系列selenium指令,當然selenium ide錄制的内容生成selenese測試腳本,可以轉換成不同測語言腳本。

selenium rc 架構

下面我們來了解隐藏在selenium rc背後的技術實作。要了解selenium rc server 工作的細節,需要我們了解下面幾個概念。

1. 同源規則

selenium面臨的主要限制就是同源規則,市場上的每一款浏覽器都應用了這一安全限制。其目的是確定一個站點的内容不會被另一個站點的腳本所通路。同源規則專注于確定浏覽器加載的任何代碼,都隻能在同一站點内部進行操作。假如你在一個浏覽器的一個頁籤内打開了一個網上銀行的頁面(www.yinhang.com)。又在另頁籤上不小心打開了一個挂馬的頁面(www.guama.com),那麼挂馬的頁面是不能操作網上銀行頁面的内容,因為引入了同源規則。是以,他們不能互相作用。如果不引入同源規則,我們可以想象使用者很生氣,後果很嚴重。

要在這一規則下工作,selenium core必須與待測系統在同一源中。在曆史上,selenium core被這一問題所限制,因為它是用javascrpt實作的。但是selenium rc 沒有被同源規則所限制,它使用selenium server作為單利來回避這一問題,“哄騙”浏覽器,讓浏覽器以為自己在server提供的單一站點上工作。

同源:相同的協定、端口、域名

感興趣的同學google“同源規則”和“xss(跨站點執行腳本)”相關技術

2. 代理注入

selenium 用來規避同源規則的第一種方法是代理注入,在代理注入模式下,selenium server 像用戶端配置的http代理一樣工作,它位于浏覽器和待測系統之間。接着其僞造待測系統的url(內建selenium core 和一系列測試案例并加以傳遞,它們就像同源一樣)

代理作為第三者,在雙方間傳遞資訊,它表現的像一個“web伺服器”,想浏覽器傳遞待測系統。作為代理selenium server ,它擁有篡改待測系統真實url的能力。

浏覽器啟動時,使用配置的profile,其中已經設定localhost:4444作為http代理,這就是為什麼任何來自浏覽器的http請求都會經過selenium server,而且http響應也來自selenium server而非真實的伺服器。

菜鳥學自動化測試(七)----selenium RC 工作原理

(1)客戶驅動與selenium rc server之間建立起一個連結。

(2)selenium rc server 啟動浏覽器,并在浏覽器加載頁面中注入了selenium core 的javascript

(3)用戶端驅動給server傳遞一條selenese指令

(4)用戶端驅動個server解釋指令,并觸發對應的javascript在浏覽器中執行。

(5)selenium core訓示浏覽器執行第一條指令,例如打開一個待測系統頁面。

(6)浏覽器接收到打開請求後,向selenium rc server(作為浏覽器的http代理),要求web站點内容。

(7)selenium rc server與web伺服器通信,請求頁面,并且一旦收到響應就将頁面傳遞給浏覽器,但它會篡改源,是頁面看上去好像來自于與selenium core同源的伺服器。

(8)浏覽器接收到web頁面後,就在保留的架構\視窗中展示頁面。

3. 提高浏覽器權限

這一方式下的工作流與代理注入十分相似,差別在于浏覽器以特殊模式-------“高特權模式”啟動。它允許浏覽器做一些通常不被允許的事情,如xss。通過這個浏覽器模式,selenium core 可以直接帶卡待測系統,并讀取和操作其中的内容,而不需要通過selenium rc server來傳遞整個待測系統。

菜鳥學自動化測試(七)----selenium RC 工作原理

(2)selenium rc server啟動浏覽器,其實用的url會在頁面中加載 selenium core

(3)selenium core 從用戶端啟動得到第一條指令(通過selenium rc server)

(4)selenium core 執行第一條指令。

(5)浏覽器接到打開請求,向web伺服器請求頁面,一旦浏覽器接收到web頁面後,就在保留的架構\視窗中展示頁面。

===========================================================================

圖不優雅,但也是自己花費一個多小時畫的。

關于selenium rc 的工作原理。沒有hyddd将的好,也沒他了解的深入。但也算是自己小小的總結。