----------------------------------------------appium的一些基本概念----------------------------------------------html
appium的核心實際上是一個暴露了一系列REST API的server。java
這個server的功能其實很簡單:監聽一個端口,而後接收由client發送來的command。翻譯這些command,把這些command轉成移動設備能夠理解的形式發送給移動設備,而後移動設備執行完這些command後把執行結果返回給appium server,appium server再把執行結果返回給client。node
在這裏client其實就是發起command的設備,通常來講就是咱們代碼執行的機器,執行appium測試代碼的機器。狹義點理解,能夠把client理解成是代碼,這些代碼能夠是java/ruby/python/js的,只要它實現了webdriver標準協議就能夠。python
如何部署和使用Appium,一塊兒來看看吧!linux
---------------------------------------------------安裝各類組件----------------------------------------------------android
1、安裝nodejs0.8版本及以上ios
地址:http://nodejs.cn/download/web
下載合適本身機型的版本,Windows下安裝很簡單,一直下一步;npm
驗證安裝是否成功,Win+R>>cmd->>node - v,如出現相似如下提示,證實安裝成功!windows
2、安裝配置Java的JDK(Java軟件開發工具包)
地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下載合適本身機型的版本,Windows下安裝很簡單,一直下一步;
打開jdk的安裝目錄下的bin目錄,裏面有許多後綴名爲exe的可執行程序,這些都是JDK包含的工具。經過配置JDK的環境變量,咱們能夠方便地調用這些工具及它們的命令:
javac:Java編譯器,將源代碼轉成字節碼。
jar:打包工具,將相關的類文件打包成一個文件。
javadoc:文檔生成器,從源碼註釋中提取文檔。
jdb:debugger,調試查錯工具。
java:運行編譯後的java程序。
一、JAVA_HOME
新建一個名叫「JAVA_HOME」的用戶變量,如不會請參考:http://my.oschina.net/u/563250/blog/490614
變量值爲JDK的安裝目錄,筆者爲 C:\Program Files\Java\jdk1.8.0_51
建立好後則能夠利用%JAVA_HOME%做爲JDK安裝目錄的統一引用路徑;
二、PATH
在已有的環境變量PATH變量值的最後追加 ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
三、CLASSPATH
新建一個名叫「CLASSPATH」的用戶變量, 變量值爲 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
注意變量值字符串前面有一個"."表示當前目錄,設置CLASSPATH 的目的,在於告訴Java執行環境,在哪些目錄下能夠找到您所要執行的Java程序所須要的類或者包;
驗證安裝是否成功,Win+R>>cmd->>java -version,如出現相似如下提示,證實安裝成功!
3、安裝配置Android的SDK(Android軟件開發工具包)
地址:http://developer.android.com/studio/installing/index.html
僅下載SDK TOOLS安裝工具便可,沒必要安裝ANDROID STUDIO,咱們的測試代碼寫在Eclipse裏;打開頁面後首先看到的是Android studio,拉到頁面底部,能夠看到Android SDK。
安裝完成後,配置環境變量:
一、ANDROID_HOME
新建一個名叫「ANDROID_HOME」的用戶變量
變量值爲Android SDK的安裝目錄,筆者爲 C:\Program Files (x86)\android-sdk-windows
二、PATH
在已有的環境變量PATH變量值的最後追加 ;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools
在安裝目錄或開始菜單中找到SDK Manager.exe並打開,工具會自動檢測系統當前安了哪些SDK工具,並獲取各個版本可安裝的SDK,默認狀況下只安裝了Tools下的Android SDK Tools;圖中Android SDK Platform-tools是我自行安裝的。除默認已安裝選項外,其餘選項可所有選中安裝,也能夠選擇相同選項中的一項進行安裝。
獲取可安裝的SDK版本時,國內有牆,有時候會出現獲取失敗的狀況,以下圖:
能夠經過以下設置解決問題,選擇Tools->>Options打開Android SDK Manager - Settings
將HTTP Proxy Server和HTTP Proxy Port,鏈接服務器使用的代理地址和端口分別修改成「mirrors.opencas.cn」「80」;
若該地址仍然沒法解決問題不正確,請參考該網站得到更多代理地址,或從該網站上直接手動下載:http://www.androiddevtools.cn/
或者遇到這種錯誤:
Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: peer not authenticated
Failed to fetch URL https://dl-ssl.google.com/android/repository/repository-7.xml, reason: SSLPeerUnverified peer not authenticated
遇到這種錯誤通常是由於在公司內網,公司內網設置了代理,須要在Android SDK Manager中設置代理爲公司代理。
修改代理地址和端口後,選擇Packages->>Reload,從新獲取,等待Android SDK Tools下方提示Done loading packages,即加載完成。選擇須要安裝的SDK,Appium官方推薦API 17及以上的版本都支 持,能夠任意安裝一個API 17及以上的版本,選擇右側的Install xx packages;
驗證安裝是否成功,Win+R>>cmd->>android -h,如出現相似如下提示,證實安裝成功!(固然,已經能夠正常運行Android SDK Tools,確定是安裝成功了,不妨再檢查一下)
3、安裝Appium
點擊Download Appium,默認就下載的是AppiumForWindows安裝包,下載完成後,解壓安裝包,運行appium-installer.exe進行安裝;
注:還可使用node.js的模塊管理工具npm,輸入命令在線安裝(Win+R->>cmd->>npm install -g appium),但在線安裝失敗的概率比較大,貌似是由於網絡不穩或權限問題沒法解壓,仍是推薦直接下 載Windows安裝包;
安裝完成後,配置環境變量:
一、PATH
在已有的環境變量PATH變量值的最後追加Appium的安裝bin目錄,筆者爲 C:\Program Files (x86)\Appium\node_modules\.bin
驗證安裝是否成功,Win+R>>cmd->>appium,如出現相似如下提示,證實安裝成功!
4、安裝Eclipse
地址:http://www.eclipse.org/downloads/
選擇Eclipse IDE for Java EE Developers,下載合適本身機型的IDE,Eclipse不須要安裝,直接將下載的安裝包解壓,並打開eclipse.exe,選擇一個工做目錄便可;
---------------------------------------------------測試前的準備----------------------------------------------------
1、啓動一個Android模擬器或者鏈接上一個API 17以上的android真機
(1)打開Android SDK Tools中的AVD Manager,點擊右側的create,新建一個新的AVD(Android Virtual Device),設置AVD的各個屬性,點擊OK;
注:若SDK下載安裝完整,但CPU/ABI一欄沒法選擇,被灰掉或禁用,則多是SDK安裝目錄太長,將SDK拷貝到別的目錄,再次打開AVD Manager.exe,新建一個AVD,CPU/ABI一欄就能夠選擇了;
(2)點擊右側的start,選擇Launch,啓動模擬器;
(3)點擊launch後,可能會遇到下圖中的錯誤:(若是沒有遇到請忽略這步)
這是由於電腦系統中Intel Virtualization Technology(VT-x)沒有打開,解決辦法爲,在BIOS中開啓Intel Virtualization Technology:在開機時按esc,選擇F10(每一個人電腦進入BIOS方法可能不一樣),選擇Advanced->device->勾上interl virtualization Technology,保存退出。而後到Android SDK安裝文件夾下的extras\intel\Hardware_Accelerated_Execution_Manager運行一下 intelhaxm-android.exe,個人目錄是C:\Program Files (x86)\android-sdk-windows\extras\intel\Hardware_Accelerated_Execution_Manager。再點擊launch就沒有報這個錯誤了,模擬器進入鏈接狀態,等待一會,能夠看到一個手機屏幕。
注:若是手機屏幕爲鎖定狀態,必定要滑動屏幕解鎖,不然Appium沒法啓動被測試應用程序;啓動後的手機屏幕以下:
2、打開Appium
雙擊桌面上Appium圖標,點擊右上角的Launch the Appium Node Server按鈕;
或:Win+R->>cmd->>appium,啓動Appium Server服務(和上訴方法二選一便可);
3、在Eclipse中配置Selenium、Appium類庫
(1)下載Selenium類庫
client地址:http://selenium-release.storage.googleapis.com/3.0.1/selenium-java-3.0.1.zip
server地址:https://goo.gl/Lyo36k
(確認2016.11.14有效,如無效請訪問http://docs.seleniumhq.org/download/ 進行下載)
(2)下載Appium java版類庫
地址:http://appium.io/downloads.html
選擇java,下載jar包;
(3)在Eclipse中導入
打開Eclipse,新建一個java Project
在新項目上,新建一個Folder,命名爲「lib」,將下載的三個類庫「selenium-java-3.0.1.zip」、「selenium-server-standalone-3.0.1.jar」、「java-client-4.1.2.jar」,從文件夾中直接拖放到「lib」下;
全選lib文件夾下的3個類包文件,右鍵->>Build Path->>add to Build Path,這3個類包就會加到Reference Libraries中;
-------------------------------------------------------開始測試--------------------------------------------------------
(1)在項目的src下,新建一個package,在package下新建一個class(筆者的命名分別爲「appiumtest」和「demo2」);
在類中輸入如下代碼,代碼內容爲,啓動Android模擬器上自帶的Calculator計算器,並分別點擊「1+2=」;
package appiumtest;
import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.net.URL;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class demo2 {
private AndroidDriver driver;
@Before
public void calc() throws Exception {
DesiredCapabilities capabilities = new DesiredCapabilities();
//capabilities.setCapability(CapabilityType.BROWSER_NAME, "");// 這句不是必須的
capabilities.setCapability("deviceName", "Android Emulator");
capabilities.setCapability("platformVersion", "6.0");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("appPackage", "com.android.calculator2");
capabilities.setCapability("appActivity", ".Calculator");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);
}
@After
public void tearDown() throws Exception {
driver.quit();
}
@Test
public void add() {
driver.findElementByName("1").click();
driver.findElementByName("+").click();
driver.findElementByName("2").click();
driver.findElementByName("=").click();
driver.quit();
}
}
(2)在項目上右鍵->>Run As->>JUnit Test;
(3)測試用例正在運行,查看Appium,輸出了不少運行的日誌,查看模擬器,Appium控制模擬器打開了自帶的計算器,並分別點擊「1+2=」,至此部署Appium測試環境已完成並測試成功!接下來就能夠開發真正的自動化測試用例啦!
--------------------------------------分割線(Desired Capabilities詳解)-------------------------------------
Desired Capabilities在啓動session的時候是必須提供的,它本質上是key value的對象,它告訴appium server這樣一些事情:
一、本次測試是啓動瀏覽器仍是啓動移動設備?
二、是啓動andorid仍是啓動ios?
三、啓動android時,app的package是什麼?
四、啓動android時,app的activity是什麼?
Appium的Desired Capabilities是擴展了webdriver的Desired Capabilities的,下面的一些通用配置是須要指定的:
Capability名稱 | 描述 | 可能的值舉例 |
automationName | 使用哪一種自動化引擎(默認:Appium) | Appium ,Selendroid |
platformName | 使用哪一種移動平臺 | iOS,Android,FirefoxOS |
platformVersion | 移動平臺版本 | 7.1,4.4 |
deviceName | 啓動哪一種設備?真機仍是模擬器 | iPhone Simulator, iPad Simulator,iPhone Retina 4-inch,Android Emulator,Galaxy S4,etc…. On iOS,this should be one of the valid devices returned by instruments with instruments -s devices. On Android this capability is currently ignored. |
app | 應用(.ipa .apk .zip)的絕對路徑或遠程的Http URL | /abs/path/to/my.apk , http://myapp.com/app.ipa |
browserName | 移動瀏覽器的名稱(若是被測應用程序已安裝到移動設備,則可設置爲空字符串) | ‘Safari’ for iOS and ‘Chrome’, ‘Chromium’, or ‘Browser’ for Android |
newCommandTimeout | 客戶端退出和結束會話以前,Appium等待從客戶端發來一個新命令的時間,即超時時間(秒) | 60 |
autoLaunch | 是否自動安裝和啓動被測app(默認:true) | true, false |
language | (Sim/Emu-only) Language to set for the simulator / emulator | fr |
locale | (Sim/Emu-only) Locale to set for the simulator / emulator | fr_CA |
udid | 物理機的id | 1ae203187fc012g |
orientation | (Sim/Emu-only) start in a certain orientation | LANDSCAPE,PORTRAIT |
autoWebview | Move directly into Webview context(默認:false) | true, false |
noReset | 在測試前不重置app的狀態(默認:false) | true, false |
fullReset | IOS:刪除整個模擬器目錄;Android:經過卸載app的方式重置app的狀態,而不是僅清除app的數據,在Android設備上,當測試結束後,也會完全移除app(默認:false) | true, false |
下面這些屬性是android平臺特定的(還有不少沒有列出來的能夠查看:http://appium.io/documentation.html):
Capability名稱 | 描述 | 可能的值舉例 |
appActivity | 待測試的app的Activity名字,原生app的話要在activity前加個"." | MainActivity, .Settings |
appPackage | 待測試的app的java package | com.example.android.myApp, com.android.settings |
--------------------------------------分割線(工具的使用)-------------------------------------
經過上一節咱們發現,要獲取app的package和activity名字,要用什麼工具呢?
1、monitor.bat
該文件位於SDK安裝目錄tools下,如筆者在「C:\Program Files (x86)\Android\android-sdk\tools」下,雙擊運行monitor.bat便可運行,該工具能夠幫咱們找到android控件的content-description,爲之後的find_element_by_accessibility_id 定位方法作參數使用,也可查看被測app的appPackage,以下圖。
2、uiautomatorviewer.bat
該文件位於SDK安裝目錄tools下,如筆者在「C:\Program Files (x86)\Android\android-sdk\tools」下,雙擊uiautomatorviewer.bat便可運行,該工具主要用來查看控件的屬性,好比resource id,class name等,也可查看被測app的appPackage(Desired Capabilities中使用)。
使用方法(以計算器爲例):將模擬器的打開,點擊左上角綠色的Android小圖標(Device ScreenShot),能夠爲當前界面UI建立一個帶有控件信息的截圖,將鼠標放在想要的地方,便可看到控件的相關屬性: