1. 程式人生 > >webdriver、appium的工作原理

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的工作原理

  1. client端也就是我們 test script是我們的webdriver測試指令碼。

  2. 中間是起的Appium的服務,Appium在服務端起了一個Server(4723埠),跟selenium Webdriver測試框架類似, Appium⽀持標準的WebDriver JSONWireProtocol。在這裡提供它提供了一套REST的介面,Appium Server接收web driver client標準rest請求,解析請求內容,調⽤用對應的框架響應操作。

  3. appium server會把請求轉發給中介軟體Bootstrap.jar ,它是用java寫的,安裝在手機上.Bootstrap監聽4724埠並接收appium 的命令,最終通過調⽤用UiAutomator的命令來實現。

  4. 最後Bootstrap將執行的結果返回給appium server。

  5. appium server再將結果返回給 appium client。

appium在ios的工作原理

   在IOS端,appium同樣使⽤WebDriver的一套協議。與Android端測試框架不同的是,appium ios封裝了apple的 Instruments框架,主要用了Instrument裡的UI Automation(Apple的自動化測試框架),然後在裝置中注⼊入bootstrap.js進行監聽。

  1. client端 依然是 test script是我們的webdriver測試指令碼。

  2. 中間是起的Appium的服務,Appium在服務端起了一個Server(4723埠),跟selenium Webdriver測試框架類似, Appium⽀持標準的WebDriver JSONWireProtocol。在這裡提供它提供了一套REST的介面,Appium Server接收web driver client標準rest請求,解析請求內容,調⽤用對應的框架響應操作。

  3. appium server呼叫instruments.js 啟動⼀一個socket server,同時分出一個⼦子程序運⾏instruments.app,將bootstrap.js(一個UIAutomation指令碼)注⼊入到device⽤於和外界進行互動

  4. 最後Bootstrap.js將執行的結果返回給appium server

  5. appium server再將結果返回給 appium client。

android與ios區別在於appium 將請求轉發到bootstrap.js或者bootstrap.jar.然後由bootstrap 驅動UIAutomation和UiAutomator去devices上完成具體的動作。