1. 程式人生 > >Appium跨平臺移動自動化工具

Appium跨平臺移動自動化工具

什麼是Appium?

Appium 是一款開源測試自動化工具,由 Sauce Labs開發和支援,支援 iOS 平臺和 Android 平臺上的原生應用,web應用和混合應用。它也是一款跨平臺移動自動化工具。它在通過使用 JSONWP協議(WebDriver開發者編寫的一種通訊機制),使用Selenium WebDriver與iOS和Android本機應用程式進行互動

市場上有許多其他自動化工具可用於自動化操作本機應用程式,如MonkeyTalk,KIF,Calabash和Frank,但大多數這些工具需要使用您的應用程式程式碼編譯額外的agent,以便該工具可以與移動應用程式進行互動。那麼問題來了,您需要在提交應用程式之前刪除這些自動化agent庫,從而保證您所測試的應用程式與您在App Store中提交的應用程式相同,徒增麻煩?

Appium這個由Node.js編寫實現的自動化工具是Android iOS 的混合和原生移動應用程式走向自動化的一個關鍵作用。它的核心原則之一是測試程式碼可以用任何框架或語言編寫,如Ruby on Rails,C#和Java,而無需為自動化去修改應用程式。node.js伺服器和Selenium客戶端庫之間的互動最終與移動應用程式一起工作。而且Appium是開源的,可以在各種裝置和模擬器上無縫執行,使其成為移動測試自動化的最佳選擇。

 

Appium 體系結構

Appium是一個用node.js編寫的HTTP伺服器,它為iOSAndroid等不同平臺建立和處理多個WebDriver

會話。

Appium在裝置上啟動“測試用例”,該裝置生成伺服器並從Appium 伺服器偵聽代理命令。它與Selenium伺服器幾乎相同,後者從selenium客戶端庫中感知HTTP請求,並根據平臺以不同方式處理這些請求。像iOSAndroid這樣的每個供應商都有不同的方式和機制來在裝置上執行測試用例,因此Appium會侵入並在從Appium伺服器監聽命令後執行此測試用例。

Appium如何在iOS中執行


在iOS上,Appium代理命令到在Mac Instruments環境中執行的UIAutomation指令碼。 Apple提供了這個名為“instruments”的應用程式,用於執行分析,控制和構建iOS應用程式等許多活動,但它還有一個自動化元件,我們可以在javascript中編寫一些命令,使用UIAutomation API與App UI進行互動。 Appium利用這些相同的庫對iOS應用程式進行自動化。

Appium

在上圖中,我們可以在iOS自動化的描述中看到Appium的體系結構。如果我們談論一個命令生命週期,就像Selenium webdriver從(Element.click)這樣的程式碼中選擇一個命令,並通過http請求以JSon的形式傳送給Appium伺服器。 Appium伺服器知道像iOS和Android這樣的自動化特徵,並將此命令傳送到Instruments命令伺服器,該命令伺服器將等待Instruments命令客戶端(用node.js編寫)來獲取它並在iOS中的bootstrap.js中執行它儀器環境。執行該命令後,命令客戶端將訊息傳送回Appium伺服器,該伺服器在其控制檯中記錄與該命令相關的所有內容。這個迴圈一直持續到所有命令執行的時間。

Appium如何在Android中執行


在Android的情況下情況幾乎相似,其中Appium代理命令到在裝置上執行的UIAutomator測試用例。 UIAutomator是Android的原生UI自動化框架,支援從命令列直接將junit測試用例執行到裝置中。它使用java作為程式語言,但Appium將其解析成任何WebDriver支援的語言執行。

Appium

在上圖中我們可以看到,這裡我們用Bootstrap.jar代替bootstrap.js,它代表了在java中編譯時的測試用例。一旦它啟動它就會產生一個TCP伺服器。這裡TCP伺服器駐留在裝置內部,客戶端處於Appium程序中,這與iOS中的方式完全相反。

 

Appium的優點和缺點:

優點:

  • Appium的美妙之在於,所有複雜性都在Appium伺服器的引擎蓋下,對於自動化開發人員而言,程式語言和整個體驗將保持相同,無論他自動化的平臺(iOS或Android)如何。
  • Appium的其他好處是它打開了跨平臺移動測試的大門,這意味著相同的測試可以在多個平臺上執行。
  • 與其他工具不同,Appium不要求您在應用程式中包含一些額外的代理,以使其自動化。它相信我們將在應用程式商店中測試相同應用程式的理念。
  • 它由Sauce Labs開發和支援,並且在WebDriver社群中用於移動自動化的速度非常快。
  • 它可以自動化Web,HybridNative 移動應用程式。

缺點:

  •  
  • 擴充套件是持續整合的重要考慮因素,而Appium是實現這一期望的重要工具。 原因是技術限制,在iOS中我們只能在每臺Mac OS上執行一個例項,因此我們只能在每一臺mac機器上執行我們的iOS指令碼。 因此,如果我們想要同時在多個iOS裝置上執行我們的測試,那麼需要安排相同數量的Mac機器,這將會代價很大。 但是,如果我們在Sauce Lab的移動雲中執行我們的指令碼,目前支援在多個iOS模擬器上同時執行指令碼,則可以解決此限制。
    Appium使用UIAutomator對於Android的自動化,只支援Android的SDK平臺,API 16或更高版本,以便支援舊的API,他們使用另一個名為開源庫Selendroid。所以我不會說它是一個限制,但它絕對是配置方面的開銷。

在Mac上配置Appium:

在Mac 上執行Appium需要以下配置:

  • 首先,我們需要從此連結下載適用於Mac 的Appium應用程式  。下載後,您需要將此應用程式移動到您的應用程式資料夾,然後您可以從Mac Launchpad啟動它。
  • 由於Appium在內部使用node.js所以我們還需要在mac機器上安裝node,可以從http://nodejs.org/下載   ,它提供一個node-v0.10.xx.pkg檔案供您安裝。
  • 我們還需要確保使用的是  Mac OSX 10.7+
  • 應在mac機器上安裝XCode 4.5或更高版本以及iPhone模擬器SDK和命令列工具。