SkySeraph Jan. 26th 2017java
Email:skyseraph00@163.comandroid
更多精彩請直接訪問SkySeraph我的站點:www.skyseraph.com ios
Appium 是一個自動化測試開源工具,支持 iOS 平臺和 Android 平臺上的原生應用,web 應用和混合應用。git
這裏有很關鍵一點,跨平臺。更多瞭解Appuim多平臺支持相關信息,參考官方platform-supportgithub
Session機制
Appuim的自動化測試是在一個 session 的上下文中運行,能夠理解成Appuim會話。
每一次當Appium server成功啓動後,客戶端的測試庫(client library)會要求與Server建立一個會話(session)。
會話的做用是爲了確保能區別不一樣的客戶端請求與不一樣的被測應用,每一個特定的會話都有一個特定的sessionId參數。每次測試開始時,客戶端將初始化一個session會話,雖然不一樣的語言初始化的方式不一樣,可是他們都要發送POST/session請求到服務器端,這些請求裏面都會帶有一個對象:desired capabilities ,這個時候服務器端會啓動自動化session而後返回一個session ID,之後的命令都會用這個seesion ID去匹配。web
Appuim服務端
包含衆多語言庫(Java, Ruby, Python, PHP, JavaScript,C#等),都實現了 Appium 對 WebDriver 協議的擴展。bootstrap
JSON wire protocol
Appuim中很是重要的協議服務器
Appuim基於Nodejs編寫,基於HTTP協議,能夠當作一個相似selenium webdriver的基於移動平臺的webdriver,遵循RESTful設計風格web服務器,接受客戶端的鏈接而後在手機設備上執行命令,最後經過HTTP的響應收集命令執行的結果。session
以下爲我整理的Appuim Android平臺下架構原理圖,iOS也相似,只是Bootstrap部分由Instruments替換,UiAutomator由UIAutomation替換。架構
以下兩圖參考testerhome PPT的Appuim Android和iOS平臺下數據流程圖。
其中,Android平臺下,Android API 17+,底層調用android平臺自帶的UI測試框架Uiautomator;反之,調用的selendroid測試框架來完成。
以下所示,Appuim Bootstrap部分源碼結構,分UiWatchers、Bootstrap和UIAutomator三部分,很是清晰。
Bootstrap入口類爲Bootstrap.java,繼承自UiAutomatorTestCase,而後開啓Socket接收命令,時序以下。
類關係以下圖所示,很簡單。
Bootstrap總體分SocketServer部分,CommandHandler部分,Watchers部分和UiAutomator四部分。
1 |
try { |
1 |
private static HashMap<String, CommandHandler> map = new HashMap<String, CommandHandler>(); |
具體映射經過AndroidCommandExecutor中的execute實現。
1 |
public AndroidCommandResult execute(final AndroidCommand command) { |
1 |
public void registerAnrAndCrashWatchers() { |
文章更新, 請移步我的站點查看.
========
By SkySeraph-2017