Appium的工作原理

2020-10-25 15:00:24

1、簡介

appium是c/s模式的,基於webdriver協定新增對移動裝置自動化api擴充套件而成的,所以具有和webdriver一樣的特性,比如多語言支援,webdriver是基於http協定的,第一連線會建立一個session對談,並通過post傳送一個json告知伺服器端相關測試資訊.對於Android來說,4.2以後是基於uiautomator框架實現查詢注入事件的,4.2以前則是instrumentation框架的,並封裝成,個叫Selendroid這玩意提供服務,使用者端只需要傳送http請求實現通訊,意味著使用者端就是多語言支援。appium伺服器端是node.js寫的,所以你安裝的時候無論哪個平臺都是先裝node。

2、工作原理

2.1 Android

在Android端,appium基於WebDriver協定,利用Bootstrap.jar,最後通過調⽤用UiAutomator的命令,實現App的自動化測試。UiAutomator測試框架是Android SDK自帶的App UI自動化測試Java庫。另外由於UiAutomator對H5的支援有限,appium引入了chromedriver以及safaridriver等來實現基於H5的自動化。

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。

2.2 ios

在IOS端,appium同樣使⽤WebDriver的一套協定。

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

appium 在ios端工作流
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上完成具體的動作。

3、檢視啟動紀錄檔分析

Appium執行原理
appium可以理解為一個c/s架構軟體,在pc端安裝的appium server端,通過appium client傳送操作命令到app端
;在啟動時,appium會將bootstrap推播到app上,通過並在app端建立埠為4724的socket埠,接受來自Appium的
json命令,通過UIautomaticer操控app上的控制元件。