Appium 是一個自動化測試開源工具,支持 iOS 平臺和 Android 平臺上的原生應用,web 應用和混合應用。所謂的「移動原生應用」是指那些用 iOS SDK 或者 Android SDK 寫的應用。所謂的「移動web 應用」是指使用移動瀏覽器訪問的應用(Appium 支持 iOS 上的 Safari 和 Android 上的 Chrome)。所謂的「混合應用」是指原生代碼封裝網頁視圖——原生代碼和 web 內容交互。好比,像 天貓APP,能夠幫助開發者使用網頁技術開發應用,而後用原生代碼封裝,這些就是混合應用。web
重要的是,Appium 是一個跨平臺的工具:它容許測試人員在不一樣的平臺(iOS,Android),使用不一樣的開發語言(JAVA,Python和Ruby等語言),使用同一套API來寫自動化測試腳本,這樣大大增長了 iOS 和 Android 測試代碼的複用性。chrome
爲了知足移動自動化需求,Appium 遵循着一種哲學,重點體現於如下4個需求:瀏覽器
·你無需爲了自動化,而從新編譯或者修改你的應用。服務器
·你沒必要侷限於某種語言或者框架或者平臺來書寫和運行測試代碼。session
·一個移動自動化的框架不該該在接口上重複造輪子。(移動自動化的接口應該統一)。架構
源代碼必須開源框架
Appium 的核心是一個 web 服務器,它提供了一套 REST 的接口。它收到客戶端的鏈接,監聽到命令,接着在移動設備上執行這些命令,而後將執行結果放在 HTTP響應中返還給客戶端。工具
自動化始終圍繞一個session進行,客戶端初始化一個seesion(會話)來與服務端交互,不一樣的語言有不一樣的實現方式,可是他們最終都是發送爲一個POST請求給服務端,請求中包含一個JSON對象,被稱做「desired capabilities」。此時,服務端就會開啓一個自動化的 session,而後返回一個 session ID,session ID將會被用戶發送後續的命令。測試
Desired capabilities 是一些鍵值對的集合 (好比,一個 map 或者 hash),客戶端將這些鍵值對發給服務端,告訴服務端咱們想要怎麼測試。好比,咱們能夠把platformName capability 設置爲 iOS,告訴 Appium 服務端,咱們想要一個iOS 的 session,而不是一個 Android 的。 Capabilities在後續章節中還會講解到。url
Appium server 是用 Node.js 寫的。咱們能夠用源碼編譯或者從 NPM 直接安裝。
Appium 服務端有不少語言庫 Java, Ruby, Python, PHP, JavaScript 和 C#,這些庫都實現了 Appium 對 WebDriver 協議的擴展。當使用 Appium 的時候,你只需使用這些庫代替常規的 WebDriver 庫就能夠了。
咱們提供了 GUI 封裝的 Appium 服務端下載,它封裝了運行 Appium服務端的全部依賴,而不須要擔憂怎樣安裝Node.js。其中還包括一個Inspector工具(MAC機上才能用),能夠幫助你檢查應用的界面層級,這樣寫測試用例時更方便。
Selenium JSON協議(JSONWP)是一個傳輸方法,它是由WebDriver開發者開發的,這個協議是一組特定的預約義和標準化的端點,它經過RESTful API(接口測試相關)去展示。WebDriver和JSONWP的目的就是爲了經過瀏覽器(chrome、firefox和IE)去測試web站點,APPIUM繼承了移動JSONWP協議,擴展了Selenium JSON協議,它能夠控制不一樣的移動設備的行爲,好比經過session安裝和卸載APP。
讓咱們來看幾組端點:
·/session/:sessionId - session的ID惟一標識符
·/session/:sessionId/element – 找一個元素
·/session/:sessionId/elements – 找一組元素
·/session/:sessionId/element/:id/click – 經過id找到元素以後點擊元素
·/session/:sessionId/source – 獲取頁面源碼
·/session/:sessionId/url – 獲取頁面url
·/session/:sessionId/timeouts/implicit_wait – 隱性等待
APPIUM在底層就是經過這些session來相互傳遞信息的。