盤點Selenium和Appium異同點,揭秘二者內部原理!

博為峰網校發表於2019-05-07

前段時間學習了selenium的使用,今天開始接觸appium看到appium的原理後產生了疑惑:

現在的selenium是透過webdriver來操作驅動瀏覽器的,然而appium有一個server的概念

那麼為什麼沒有app driver這個東西呢?

盤點Selenium和Appium異同點,揭秘二者內部原理!

selenium

早期的selenium

早期的selenium主要是指selenium1.0的版本,

這個版本主要由Selenium IDE + Selenium Grid + SeleniumRC組成

seleniumRC就是後來被webdriver取代的一個代理server

RC == Remote Control 遠端控制

早期Selenium 引入了 Remote Control Server 這樣一個代理 Server,JavaScript 指令碼注入和與 Server 通訊都透過這個代理 Server 來進行,JavasScript可以獲取並呼叫頁面的任何元素,Selenium啟動一個Server,將操作Web元素的API呼叫轉化為一段段JavaScript,在Selenium核心啟動瀏覽器之後注入這段JS

缺點:但是JS注入速度不理想,穩定性大大依賴於Selenium核心對API翻譯成的JS質量高低

引入代理Remote Control Server是因為“同源策略”的限制,透過這個代理伺服器來“欺騙”遠端Server,達到使其以為是從同一個地方load程式碼以正確返回請求資料的效果

seleniumRC的原理

1.Selenium RC Server 啟動一個瀏覽器(或是已經使用中),並注入js程式碼

2.將測試指令碼程式碼傳到客戶端的 Selenium-Core 中

3.Selenium-Core 翻譯並解析執行使用者錄製的操作

4.讓代理 Server 進行通訊

5.Remote Control Server 負責跟遠端 Web 應用伺服器進行通訊

seleniumRC的組成

1.Selenium Server(Launcher、Http Proxy、Selenium Core)

2.Client Libraries(用來控制server)

seleniumRC的工作流程

1.測試用例透過Client Libraries的介面向Selenium Server傳送Http請求,要求和Selenium Server建立連線

2.Selenium Server的Launcher啟動瀏覽器,把Selenium Core載入入瀏覽器頁面中,併發瀏覽器的代理設定為Selenium Server的Http Proxy。

3.測試用例透過Client Libraries的介面向Selenium Server傳送Http請求,Selenium Server對請求進行解析,然後透過Http Proxy傳送JS命令通知Selenium Core執行操作瀏覽器的動作

4.Selenium Core接收到指令後,執行操作

5.瀏覽器收到新的頁面請求資訊,於是傳送Http請求,請求新的web頁面。Selenium Server會接收到所有由它啟動的瀏覽器發動的請求

6.Selenium Server接收到瀏覽器傳送的Http請求後,自己重組Http請求,獲取對應的web頁面

7.Selenium Server的Http Proxy把接收的Web頁面返回給瀏覽器

現在的selenium

selenium3.0以後移除了seleniumRC,取而代之的是webdriver

用一張圖來展示selenium3.0的執行原理

盤點Selenium和Appium異同點,揭秘二者內部原理!

這裡講到的是測試指令碼和瀏覽器的互動,客戶端開始執行驅動瀏覽器的指令碼的時候,這時瀏覽器收到請求開始啟動並開啟偵聽埠,並自動建立session,保持瀏覽器和對應客戶端的會話連線,然後客戶端執行指令碼,向瀏覽器傳送http請求,瀏覽器解析請求,根據指令碼內容做出相應操作,返回response。這時客戶端根據response選擇結束還是繼續執行

tips:

1.webdriver操作瀏覽器、頁面採用的協議:the webdriver wire protocol

2.Client和Server的通訊協議:HTTP

3.HTTP傳輸的資料內容為遵循WP協議json格式資料

4.瀏覽器驅動實現了webdriver協議的api

appium

appium和selenium之間的不同

appium本身就是一個server,而selenium廢棄了server,用webdriver來驅動瀏覽器

appium工作原理

當開啟appium伺服器的同時就開啟了監聽埠;我們執行指令碼的時候,呼叫任何的appiumAPI,都會向Appium Server端post一條HTTP請求,請求內容就是根據webdriver wire protocol協議規定的一條JSON格式的資料;Appium Server端接收到請求後,解析出JSON資料併傳送到 手機 端;手機端上已經由BootStrap.jar(iOS為BootStrip.js)開啟的socket伺服器監聽相應的埠,BootStrap.jar在appium每個session第一次訪問手機端的時候會自動安裝;手機端接收到對應的請求後,透過BootStrap.jar翻譯成UIAutomator能執行的命令,然後透過UIAutomator處理並操作APP完成測試。

appium的幾個概念

1.appium/appium server

一般所說的appium其實是一個基於node.js的web伺服器,它是測試指令碼和裝置端互動的橋樑

用npm install -g appium 安裝的是命令列的沒有介面的appium server

2.appium GUI

它是把沒有介面的appium server封裝出了一個圖形介面,方便操作,但是現在已經被appium desktop所取代

3.appium Desktop

它是一款適用於Mac,Windows和Linux的開源應用程式,它以美觀而靈活的使用者介面為您提供appium server的強大功能

4.appium client

第1點中說到,appium其實是一個sweb server,server是接收請求來操作裝置端的app的,既然有了server那麼一定會有client

這個client就是我們寫測試指令碼時匯入的包

Python中可以執行 pip install Appium-Python-Client 來安裝

Android和 iOS

盤點Selenium和Appium異同點,揭秘二者內部原理!
盤點Selenium和Appium異同點,揭秘二者內部原理!

歡迎加入  51軟體測試大家庭,在這裡你將獲得【最新行業資訊】,【免費測試工具安裝包】,【軟體測試技術乾貨】,【面試求職技巧】... 51與你共同學習,一起成長!期待你的加入: QQ                     群:                    755431660


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2643623/,如需轉載,請註明出處,否則將追究法律責任。

相關文章