一、什么是Appium
Appium是一個開源、跨平台的測試框架,可以用來測試原生及混合的移動端應用。Appium支持IOS、Android及FirefoxOS平台。Appium使用WebDriver的json wire協議,來驅動Apple系統的UIAutomation庫、Android系統的UIAutomator框架。Appium對IOS系統的支持得益於Dan Cuellar’s對於IOS自動化的研究。Appium也集成了Selendroid,來支持老android版本。
Appium支持Selenium WebDriver支持的所有語言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl語言,更可以使用Selenium WebDriver的Api。Appium支持任何一種測試框架。如果只使用Apple的UIAutomation,我們只能用javascript來編寫測試用例,而且只能用Instruction來運行測試用例。同樣,如果只使用Google的UIAutomation,我們就只能用java來編寫測試用例。Appium實現了真正的跨平台自動化測試。
appium選擇了client-server的設計模式。只要client能夠發送http請求給server,那么的話client用什么語言來實現都是可以的,這就是appium及webdriver如何做到支持多語言的;
二、Appium的工作原理

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。

