手機自動化教育訓練:Appium介紹 Appium介紹
Appium是一個移動端的自動化架構,可用于測試原生應用,移動網頁應用和混合型應用,且是跨平台的。可用于IOS和Android以及firefox的作業系統。原生的應用是指用android或ios的sdk編寫的應用,移動網頁應用是指網頁應用,類似于ios中safari應用或者Chrome應用或者類浏覽器的應用。混合應用是指一種包裹webview的應用,原生應用于網頁内容互動性的應用。
重要的是Appium是跨平台的,何為跨平台,意思就是可以針對不同的平台用一套api來編寫測試用例。
Appium的哲學
Appium遵循下面幾個原則(其實也是appium的特點):
1.使用自動化來測試一個app,但是不需要重新編譯它
2.寫自動化case,不需要學習特定的語言
3.一個自動化架構不需要重複造輪子
4.一個自動化架構需要開源,在精神和實踐上實作開源
Appium的設計
為了遵循上面的原則,appium的解決方法分别如下:
第一條:采用底層驅動商提供的自動化架構。
IOS:蘋果的UIAutomation
Android 4.2+:谷歌的 UiAutomator
Android 2.3+:谷歌的Instrumentation(已被selendroid取
第二條:采用底層驅動商提供統一API,就是WebDriver API。
WebDriver(也稱Selenium WebDriver)其實是一個C/S架構的協定,叫做JSON Wire Protocol。通過這個協定,用任何語言寫成的用戶端都可以發送HTTP請求給伺服器。這就意味着你可以自由選擇你想要使用的測試架構和執行器,也可以将任何包含HTTP用戶端的庫檔案加入到你的代碼中。換句話說,Appium的WebDriver不是一個技術上的測試架構,而是一個自動化庫。
第三條:因為WebDriver是一個非常成熟的網頁協定且已經正在起草W3C的标準。我們為什麼還要創造其他東西呢?相反,我們在WebDriver的基礎上,擴充了一些适合移動端自動化協定的API。
第四條:你之是以能讀到這篇文章,就是因為我們開源啦。
Appium概念
C/S 架構
Appium的核心是一個遵守REST設計風格的web 伺服器,它接受用戶端的連接配接,接收用戶端的指令,在手機裝置上執行指令,然後通過HTTP的響應收集指令執行的結果。這種架構給我們提供了很好的開放特性:隻要某種語言有http 用戶端的api,我們就可以通過這個語言寫我們的測試代碼,當然了我們為了友善大家使用,提供了如下的用戶端庫供使用:

我們還可以将伺服器放到遠端,比如雲裡,這樣我們可以借助雲服務來接受指令以及解析指令。
Session
自動化的過程通常在session上下文中執行。用戶端初始化一個session會話,雖然不同的語言初始化的方式不同,但是他們都要發送
POST/session
請求到伺服器端,這些請求裡面都會帶有一個對象:
desired capabilities
,這個時候伺服器端會啟動自動化session然後傳回一個session ID,以後的指令都會用這個seesion ID去比對。
Desired Capabilities
desired capabilities
這個對象其實是一個key-value的集合,裡面包含了各種各樣的資訊,發送到伺服器端後,伺服器解析這些資訊就知道了用戶端對哪種session感興趣,然後就會啟動相應的session。這裡面的資訊會影響着伺服器端啟動session的類型。比如你platformName的值為ios,就是告訴伺服器啟動一個ios的session,而不是android seesion。如果safariAllowPopups的值為true,這是告訴safari類的自動化session,可以使用js打開新視窗。具體資訊檢視capabilities doc 詳細了解。
Appium Server
Appium server使用node.js寫的http伺服器,遵守REST風格
Appium Clients
用戶端的概念不是我們傳統意義上的用戶端,這裡用戶端更好的了解是一個擴充WebDriver 協定的庫,你在用自己喜歡的語言寫case的時候,将該語言擴充WebDrvier的庫添加到你的環境中,你就可以了解這是個用戶端。具體的庫可以參見下面的内容:
語言 | 庫位址 |
---|---|
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 |
Appium.app,Appium.exe
系統 | GUI | git位址 |
---|---|---|
windows | Appium.exe | https://github.com/appium/appium-dot-exe |
OS X | Appium.app | https://github.com/appium/appium-dot-app |