Appium工作原理

1.Appium簡介

appium 是一個自動化測試開源工具,支持 iOS 平臺和 Android 平臺上的原生應用,web應用和混合應用。

  • “移動原生應用”是指那些用iOS或者 Android SDK 寫的應用(Application簡稱app)。
  • “移動web應用”是指使用移動瀏覽器訪問的應用(appium支持iOS上的Safari和Android上的 Chrome)。
  • “混合應用”是指原生代碼封裝網頁視圖——原生代碼和 web 內容交互。比如,像Phonegap,可以幫助開發者使用網頁技術開發應用,然後用原生代碼封裝,這些就是混合應用。

重要的是,appium是一個跨平臺的工具:它允許測試人員在不同的平臺(iOS,Android)使用同一套API來寫自動化測試腳本,這樣大大增加了iOS和Android測試套件間代碼的複用性。

2.Appium與Selenium的區別

appium類庫封裝了標準Selenium客戶端類庫,爲用戶提供所有常見的JSON格式selenium命令以及額外的移動設備控制相關的命令,如多點觸控手勢和屏幕朝向。

appium客戶端類庫實現了Mobile JSON Wire Protocol(一個標準協議的官方擴展草稿)和W3C WebDriver spec(一個傳輸不可預知的自動化協議,該協議定義了MultiAction 接口)的元素。

appium服務端定義了官方協議的擴展,爲appium 用戶提供了方便的接口來執行各種設備動作,例如在測試過程中安裝/卸載App。這就是爲什麼我們需要appium特定的客戶端,而不是通用的Selenium 客戶端。當然,appium 客戶端類庫只是增加了一些功能,而實際上這些功能就是簡單的擴展了Selenium 客戶端,所以他們仍然可以用來運行通用的Selenium會話。

3.Appium支持多平臺、多語言

appium是跨平臺的,可以用在OSX,Windows以及Linux桌面系統上運行。

appium選擇了Client/Server的設計模式。只要client能夠發送http請求給server,那麼的話client用什麼語言來實現都是可以的,這就是appium及Selenium(WebDriver)如何做到支持多語言的原因;

appium擴展了WebDriver的協議,沒有自己重新去實現一套。這樣的好處是以前的WebDriver API能夠直接被繼承過來,以前的Selenium(WebDriver)各種語言的binding都可以拿來就用,省去了爲每種語言開發一個client的工作量;

語言 Github地址
Ruby https://github.com/appium/ruby_lib
Python https://github.com/appium/python-client
Java https://github.com/appium/java-client
JavaScript(Node.js) https://github.com/admc/wd
Objective C https://github.com/appium/selenium-objective-c
PHP https://github.com/appium/php-client
C#(.NET) https://github.com/appium/appium-dotnet-driver
RobotFramework https://github.com/jollychang/robotframework-appiumlibrary

4.Appium工作原理

4.1 整體工作原理

在這裏插入圖片描述
通過上面一張圖簡單展示了appium的工具原理。

首先,appium支持多語言,因爲它針對流的幾種語言分別開發的相應的appium庫。好處就是我們可以選擇自己熟悉的語言編寫appium腳本。

其次,appium支持多平臺,包括MAC和Windows。它針對這兩大平臺開發了appium-Server。

最後,appium又同時支持Android 和 iOS兩個操作系統。

這就使得appium變得非常靈活。

當我在MAC平臺上,通過Python(python-client )編寫了一個appium自動化腳本並執行,請求會首先到 appium.dum (MAC下的appium-Server),appium-Server通過解析,驅動iOS設備來執行appium自動化腳本。

或者,我在Windows平臺上,通過Java( java-client )編寫了一個appium自動化腳本並執行,請求會首先到 appiumForWindow.zip(Window下的appium-Server),appium-Server通過解析,驅動Android虛擬機或真機來執行appium腳本。

4.2 Appium在Android端的工作流程

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

工作流:

  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。

4.3 Appium在IOS端的工作流程

在IOS端,appium同樣使⽤WebDriver的一套協議。
與Android端測試框架不同的是,appium ios封裝了apple的 Instruments框架,主要用了Instrument裏的UI Automation(Apple的⾃自動化測試框架),然後在設備中注入bootstrap.js進⾏行監聽。

工作流:

  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。

注:
本文一部分內容來自 http://www.testclass.net/appium ,該網站非常棒,是學習自動化測試的好去處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章