webdriver、appium的工作原理
一、webdriver的實現原理
webdriver原理是經典的Server-Client架構(C/S)
這裡講到的是指令碼和瀏覽器的互動,client端開始執行驅動瀏覽器的指令碼的時候,這是瀏覽器收到請求開始啟動並開啟偵聽埠(80),並自動建立session,保持瀏覽器和對應客戶端的會話連線,然後客戶端執行指令碼,向瀏覽器傳送http請求,瀏覽器解析請求,根據指令碼內容做出相應操作,返回response。這時client端根據response選擇結束還是繼續執行。
- webdriver操作瀏覽器、頁面採用的協議:the webdriver wire protocol
- Client和Server的通訊協議:HTTP
- HTTP傳輸的資料內容為遵循WP協議json格式資料
二、appium的工作原理
appium的原理也是C/S架構的形式,appium本身就是一個遠端伺服器,appium中的Json wire protocol繼承自selenium的webdriver wire protocol,並進行了擴充套件,使得Json wire protocol能夠控制不同的移動裝置的行為。
當開啟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在Android的工作原理
-
client端也就是我們 test script是我們的webdriver測試指令碼。
-
中間是起的Appium的服務,Appium在服務端起了一個Server(4723埠),跟selenium Webdriver測試框架類似, Appium⽀持標準的WebDriver JSONWireProtocol。在這裡提供它提供了一套REST的介面,Appium Server接收web driver client標準rest請求,解析請求內容,調⽤用對應的框架響應操作。
-
appium server會把請求轉發給中介軟體Bootstrap.jar ,它是用java寫的,安裝在手機上.Bootstrap監聽4724埠並接收appium 的命令,最終通過調⽤用UiAutomator的命令來實現。
-
最後Bootstrap將執行的結果返回給appium server。
-
appium server再將結果返回給 appium client。
appium在ios的工作原理
在IOS端,appium同樣使⽤WebDriver的一套協議。與Android端測試框架不同的是,appium ios封裝了apple的 Instruments框架,主要用了Instrument裡的UI Automation(Apple的自動化測試框架),然後在裝置中注⼊入bootstrap.js進行監聽。
-
client端 依然是 test script是我們的webdriver測試指令碼。
-
中間是起的Appium的服務,Appium在服務端起了一個Server(4723埠),跟selenium Webdriver測試框架類似, Appium⽀持標準的WebDriver JSONWireProtocol。在這裡提供它提供了一套REST的介面,Appium Server接收web driver client標準rest請求,解析請求內容,調⽤用對應的框架響應操作。
-
appium server呼叫instruments.js 啟動⼀一個socket server,同時分出一個⼦子程序運⾏instruments.app,將bootstrap.js(一個UIAutomation指令碼)注⼊入到device⽤於和外界進行互動
-
最後Bootstrap.js將執行的結果返回給appium server
-
appium server再將結果返回給 appium client。
android與ios區別在於appium 將請求轉發到bootstrap.js或者bootstrap.jar.然後由bootstrap 驅動UIAutomation和UiAutomator去devices上完成具體的動作。