天天看點

手機自動化教育訓練:Appium介紹

手機自動化教育訓練: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,我們就可以通過這個語言寫我們的測試代碼,當然了我們為了友善大家使用,提供了如下的用戶端庫供使用:

手機自動化教育訓練:Appium介紹

我們還可以将伺服器放到遠端,比如雲裡,這樣我們可以借助雲服務來接受指令以及解析指令。

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