Appium是一種開源的工具,用于在iOS mobile、Android mobile和Windows桌面平臺上自動化本地、移動web和混合應(yīng)用程序。本機應(yīng)用程序是使用iOS、Android或Windows sdk編寫的。移動web應(yīng)用程序是使用移動瀏覽器訪問的web應(yīng)用程序(Appium在iOS和Chrome上支持Safari瀏覽器,或者Android上內(nèi)置的“瀏覽器”應(yīng)用程序)。混合應(yīng)用程序有一個圍繞“webview”的包裝,這是一個本地控件,可以與web內(nèi)容進行交互。像Phonegap這樣的項目,可以很容易地使用web技術(shù)構(gòu)建應(yīng)用程序,然后將這些技術(shù)捆綁到一個本機包裝器中,創(chuàng)建一個混合應(yīng)用程序。
重要的是,Appium是“跨平臺的”:它允許您使用相同的API編寫針對多個平臺(iOS、Android、Windows)的測試。這允許在iOS、Android和Windows testsuite之間進行代碼重用
對于“支持”其平臺和自動化方式的應(yīng)用程序的具體信息,請參見平臺支持文檔。
Appium哲學(xué)(Appium Philosophy)
Appium的設(shè)計是為了滿足移動自動化需求,根據(jù)以下四項原則概述的一種哲學(xué):
1、您不必重新編譯應(yīng)用程序或以任何方式修改它以使其自動化。
2、您不應(yīng)該將其鎖定為編寫和運行測試的特定語言或框架。
3、當(dāng)涉及到自動化api時,移動自動化框架不應(yīng)該重新發(fā)明輪子。
A mobile automation framework shouldn't reinvent the wheel when it comes to automation APIs.
4、一個移動自動化框架應(yīng)該是開源的,在精神和實踐以及名字!
Appium Design
那么Appium項目的結(jié)構(gòu)是如何實現(xiàn)這種理念的呢?我們通過在引擎蓋下使用供應(yīng)商提供的自動化框架來滿足需求# 1。這樣的話,我們就不需要在你的應(yīng)用程序中使用任何特定的或第三方的代碼或框架來編譯,這意味著你正在測試你正在發(fā)送的同一個應(yīng)用程序。我們使用的供應(yīng)商提供的框架是:
1、iOS 9.3及以上:蘋果的XCUITest
2、iOS 9.3和更低:蘋果的UIAutomation
3、Android 4.2 +:谷歌UiAutomator
4、Android 2.3 +:谷歌的Instrumentation。(通過捆綁一個單獨的項目Selendroid來提供測試支持)
5、Windows:微軟的WinAppDriver
我們通過在一個API中封裝供應(yīng)商提供的框架來滿足需求# 2,這是WebDriverAPI。WebDriver(又名“Selenium WebDriver”)指定了一個客戶機-服務(wù)器協(xié)議(稱為JSON協(xié)議)。考慮到這種客戶機-服務(wù)器架構(gòu),使用任何語言編寫的客戶端都可以用于向服務(wù)器發(fā)送適當(dāng)?shù)腍TTP請求。在所有流行的編程語言中都有客戶端。這也意味著您可以自由使用您想要的測試運行器和測試框架;客戶端庫僅僅是HTTP客戶端,可以任意混合到您的代碼中。換句話說,Appium & WebDriver客戶端并不是技術(shù)上的“測試框架”——它們是“自動化庫”。您可以任意管理您的測試環(huán)境!
我們以同樣的方式滿足需求# 3:WebDriver已經(jīng)成為自動化web瀏覽器的實際標(biāo)準(zhǔn),并且是W3C的工作草案。為什么對于手機來說,有些東西是完全不同的呢?相反,我們已經(jīng)將該協(xié)議擴展到適用于移動自動化的額外API方法。
很明顯,需求# 4是給定的——你讀這篇文章是因為Appium是開源的。
Appium概念(Appium Concepts)
Client/Server Architecture
Appium在它的核心是一個提供REST API的webserver。它接收來自客戶機的連接,偵聽命令,在移動設(shè)備上執(zhí)行這些命令,并響應(yīng)表示命令執(zhí)行結(jié)果的HTTP響應(yīng)。我們有一個客戶端/服務(wù)器架構(gòu),這打開了很多可能性:我們可以用任何具有http客戶端API的語言來編寫測試代碼,但是使用Appium客戶端庫比較容易。我們可以將服務(wù)器放在不同的機器上,而不是我們的測試運行。我們可以編寫測試代碼,并依賴像Sauce Labs這樣的云服務(wù)來接收和解釋這些命令。
Session
自動化總是在會話的上下文中執(zhí)行。客戶端以特定于每個庫的方式向服務(wù)器發(fā)起一個會話,但他們最終都會向服務(wù)器發(fā)送一個POST / session請求,并使用一個名為“desired capabilities”對象的JSON對象。此時,服務(wù)器將啟動自動化會話,并使用用于發(fā)送進一步命令的會話ID來響應(yīng)。
Desired Capabilities
Desired capabilities是一組鍵和值(i.e.,a map or hash)發(fā)送到Appium服務(wù)器,告訴服務(wù)器我們有興趣啟動什么樣的自動化會話。還有各種功能(capabilities)可以在自動化過程中修改服務(wù)器的行為。例如,我們可以將platformName的功能(capabilities)設(shè)置為iOS,告訴Appium我們想要一個iOS會話,而不是Android或Windows系統(tǒng)。或者,我們可以將safariAllowPopups功能(capabilities)設(shè)置為true,以確保在Safari自動化會話期間,允許我們使用JavaScript打開新窗口。請參閱功能文檔(capabilities doc),了解Appium可用的完整功能列表。
Appium Server
Appium是用node . js編寫的服務(wù)器。它可以由NPM直接安裝和安裝:
$ npm install -g appium
$ appium
Appium Clients
有客戶庫(Java、Ruby、Python、PHP、JavaScript和c#)支持Appium對WebDriver協(xié)議的擴展。當(dāng)使用Appium時,您希望使用這些客戶端庫而不是常規(guī)的WebDriver客戶端。您可以在這里查看完整的庫列表。
Appium.app??Appium.exe
在Appium服務(wù)器上存在可以下載的GUI包裝器。這些與運行Appium服務(wù)器所需的所有內(nèi)容捆綁在一起,因此您不必?fù)?dān)心節(jié)點。他們還配備了一個檢查器(Inspector),讓你可以查看應(yīng)用程序的層次結(jié)構(gòu),這在編寫測試用例時很有用。
Getting Started
恭喜你!你現(xiàn)在擁有足夠的知識來開始使用Appium。為什么不去開始更詳細的需求和說明?