appium實現原理

一直用的是Appium,最近在研究WebDriverAgent,對二者之間的區別和聯系有了更深的認知,
Appium可跨平臺,同時支持安卓和iOS平臺,但是WebDriverAgent目前只支持iOS平臺,在使用
Appium過程中發現Appium在定位控件總是會出現不穩定現象,相對而言WebDriverAgent穩定迅捷太多。首先對二者實現原理做簡要全面的介紹。

Appium實現原理
Appiums是由Nodejs編寫的,集成了現有優秀框架,以Selenium WebDriver的協議統一起來,遵循RESTful設計風格web 服務器,它接受客戶端的連接,接收客戶端的命令,在手機設備上執行命令,然后通過HTTP的響應收集命令執行的結果。這種架構給我們提供了很好的開放特性:只要某種語言有http 客戶端的api,我們就可以通過這個語言寫我們的測試代碼,當然了我們為了方便大家使用,提供了多種語言的客戶端庫供使用,我們在項目組選擇的就是基于Python
的client
端。
一、安卓平臺實現原理
1、架構圖

Android實現架構2、實現原理(1)最上面的Client端可以是多種語言編寫,它類似于selenium webdriver,封裝了selenium的Api,并添加了部分的新的Api,我們可以依據這些Api編輯自動化腳本。(2)Json Wire Protocol是一種協議,遵循REST風格,以JSON方法進行傳輸,是一系列的鍵值對,遵循W3C WebDriver Spec設計風格。(3)中間是起的Appium的服務,Appium在這邊起了一個Server(4723端口),在這里提供了一套web服務,Appium Server接收web driver標準請求,解析請求內容,調?用對應的uiautomator響應操作(4)Appium server
可以把請求接收并轉義轉發給中間件Bootstrap.jar,它是用java寫的,安裝在手機上。Bootstrap 接收appium 的命令(4724端口),最終通過調?用UiAutomator的命令來實現對手機的操作。(5)Bootstrap可以理解為它是一個uiautomator的測試腳本,它的入口類Bootstrap繼承于UiAutomatorTestCase,所以UiAututomator可以正常運行它,它也可以正常的使用uiautomator的方法,這個就是appium的命令可以轉換成uiautomator的命令的關鍵;其次,它是一個socket服務器,它專門監聽4724端口過來的appium的連接和命令數據,并把appium的命令轉換成uiautomator的命令來讓uiautomator進行處理;最后,它處理的是appium從pc端過來的命令,是一系列的請求。(6)最后執?行的結果以Json Wire Protocol,由Bootstrap返回給appium server,再返回給Client端,Client會匯總操作結果。
二、iOS平臺實現原理
1、架構圖
iOS實現架構
iOS實現架構2、實現原理在iOS端,appium同樣使?用WebDriver的?一套協議。與Android端測試框架不同的是,appium ios封裝了apple的 Instruments框架,主要用了Instrument里的UI Automation(Apple的?自動化測試框架),然后在設備中注?入bootstrap.js進?行監聽。3、Appium iOS比較慢的原因:(1)python client <====> Http Server(2)Http Server <====> Appium Server(3)Appium Server <====> bootstrap 耗時長(4)bootstrap <====> UIAutomation 耗時長中間層較多,各種通信傳輸是非常耗時。
WebDriverAgent實現原理
現在我想重點介紹的是WebDriverAgent,首先強調它跟UIAutomation沒有關系,它封裝的是XCTest框架,WebDriverAgent連接XCTest.framework調用蘋果的Api直接在設備上執行命令。1、原理圖
WebDriverAgent實現架構
WebDriverAgent實現架構2、實現原理(1)WebDriverAgent封裝的是XCTest,而XCTest框架是蘋果在xcode5提出的,在Xcode7中已經支持UI功能測試,facebook于2015年提出了WebDriverAgent,可支持真機和模擬器。(2)WebDriverAgent Api支持W3C WebDriver Spec設計風格。通過命令行或者xcode啟動testRunner以后,會在手機端安裝一個WebDriverAgentRunner,類似于appium中的bootstrap,可以接收client端發送的http請求,然后將請求轉義為XCTest的命令,在手機端進行操作,并且操作結果再以Json的形式反饋給client端進行匯總。(3)這里的Accessibility 是 Apple 很早之前構建的一個框架,它能幫助一些行動不便的用戶來更好地使用應用。XCTest利用Accessibility進行UI控件的識別和定位。
對比
WebDriverAgent相對于Appium有著很大優勢:
支持一臺 mac 連接多臺設備進行測試(走 xcodebuild ,不走 instruments)
任意應用的 UI 測試,是任意
支持跨應用(任意界面都能控制)
控件定位方便,直接通過ip:port/inspector
查看,無需啟動Appium GUI查看
親測比Appium執行速度快
最重要的是蘋果官方將UIAutomation標識為廢棄,XCTest是未來的趨勢,必然會發揮更大的作用

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前言 要想深入地掌握任何一門測試工具,對工具本身的架構、原理、使用的協議及相關知識點都必須要有相關的了解和認識,才...
    0xAI閱讀 4,773評論 3 55
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,915評論 18 139
  • appium在android端的工作模式: appium的核心其實是一個暴露了一系列REST API的server...
    by小杰閱讀 1,016評論 0 2
  • 0.小目標 關于UI自動化的定義,我想要的是自動地按照流程去點擊頁面、輸入數據,不需要人去參與,節省人工時間。比如...
    孢子菌閱讀 15,635評論 10 47
  • 本文章轉載于搜狗測試 不知道上次看完文章的小伙伴,有沒有點感悟; 說完UITest,讓我們再了解這個自動化框架; ...
    夜境閱讀 677評論 0 0