一、什么是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能夠發(fā)送http請求給server,那么的話client用什么語言來實現都是可以的,這就是appium及webdriver如何做到支持多語言的;
下面這段介紹來自于appium的官網。
Appium is an open-source tool you can use to automate mobile native, mobile web, and mobile hybrid applications on iOS and Android platforms. “Mobile native apps” are those written using the iOS or Android SDKs. “Mobile web apps” are web apps accessed using a mobile browser (Appium supports Safari on iOS and Chrome on Android). “Mobile hybrid apps” have a native wrapper around a “webview” – a native control that enables interaction with web content. Projects like Phonegap, for example, make it easy to build apps using web technologies that are then bundled into a native wrapper – these are hybrid apps. Importantly, Appium is “cross-platform”: it allows you to write tests against multiple platforms (iOS, Android), using the same API. This enables a large or total amount of code reuse between iOS and Android testsuites.
二、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會把請求轉發(fā)給中間件Bootstrap.jar ,它是用java寫的,安裝在手機上.Bootstrap監(jiān)聽4724端口并接收appium 的命令,最終通過調?用UiAutomator的命令來實現。
最后Bootstrap將執(zhí)行的結果返回給appium server。
appium server再將結果返回給 appium client。
2.2 ios
在IOS端,appium同樣使?WebDriver的一套協議。
與Android端測試框架不同的是,appium ios封裝了apple的 Instruments框架,主要用了Instrument里的UI Automation(Apple的?自動化測試框架),然后在設備中注?入bootstrap.js進?行監(jiān)聽。
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將執(zhí)行的結果返回給appium server
appium server再將結果返回給 appium client。
所以我們可以看到android與ios區(qū)別在于appium 將請求轉發(fā)到bootstrap.js或者bootstrap.jar.然后由bootstrap 驅動UIAutomation和UiAutomator去devices上完成具體的動作。