ppium簡介及工作原理

weixin_41722857發表於2018-03-14
一、什麼是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的官網。

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端工作流
  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。

2.2 ios

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

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

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

相關文章