Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android自動化測試-UiAutomator使用入門

android自動化測試-UiAutomator使用入門

編輯:關於Android編程

為什麼選擇UiAutomator

作為親兒子UiAutomator隨Android同步推出,隨Android版本同步升級,經過多次迭代目前已經相當穩定。 相比MonkeyRunner,UiAutomator接口豐富易用,可以支持所有Android事件操作,事件操作不依賴於控件坐標,可以通過斷言和截圖驗證正確性,非常適合做UI測試。 UIAutomator不需要測試人員了解代碼實現細節,屬於功能和黑盒測試。測試代碼結構簡單,編寫容易,學習曲線低。基於JAVA,一次編譯可以運行於所有Android設備。   注: UIAutomator不適合OpenGL和HTML為主的程序,因為這類程序未使用Android的view體系。  

UIAutomator的使用准備

 

1.首先介紹UIAutomator測試框架的UI工具:uiautomatorviewer

uiautomatorviewer位於sdk/tools目錄下,可以掃描、分析待測試應用界面,分析結果可以導出為xml與截圖。通過該工具可以分析出UI控件的id,text,focusable等等各種屬性,甚至布局上的層次關系。 可以在DDMS中啟動,如下: \   \ 上圖uiautomatorviewer的運行截圖,左側為手機當前畫面截圖,右側上部為view控件的層次關系,下部為當前選中控件的各種信息。在左側屏幕上選擇一個組件,可以查看到該控件的屬性,在我們寫腳本的時候則可以根據對應的屬性信息找到該控件然後對控件進行操作,或者根據某些屬性進行判斷,比如是否可點擊等~  

2.uiautomator簡介

uiautomator是一個包含一套UI測試API,和支持運行測試程序的JAR包。該JAR包位於sdk/platforms/android-*/uiautomator.jar. 使用時需要注意自己的SDK版本需要大於16,SDK Tools版本需要大於21。 uiautomator的使用說起來其實很簡單,根據屬性找到控件,然後對該控件進行操作,大概如下圖: \ \

uiautomator的使用步驟

下面用一個例子介紹uiautomator的使用。在該例子中我們將模擬APP的登錄並退出。 以Eclipse為例: 1.創建一個Java工程 File-->New-->Java Project 輸入工程名稱,例如MessageTsetCase. 點擊Finish   2.添加必要的Jar包 在Project Explorer中右擊剛剛創建的這個工程,選擇 Properties-->Java build Path添加如下JAR包 a.選擇Add library -->JUnit選擇Junit3 b.選擇Add External JARS, 選擇sdk/platforms/android-*/目錄下的uiautomator.jar和android.jar,路徑中的*請使用自己以下載的最新版本。   3.File-->new-->Class創建一個新的文件。   4.編寫測試用例,通常可以為一個測試用例編寫一個單獨的方法:
package com.iflytek.test;

import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiSelector;
import com.android.uiautomator.testrunner.UiAutomatorTestCase;

public class MessageTestCase extends UiAutomatorTestCase {
    public void testDemo() throws UiObjectNotFoundException {
        
        // 模擬 HOME 鍵點擊事件
    	getUiDevice().pressHome();
        // 找到 Apps tab 按鈕
        UiObject appsTab = new UiObject(new UiSelector().text("智慧社區"));
        appsTab.click();
        
        //按返回鍵退出
        getUiDevice().pressBack();
        getUiDevice().pressBack();
        getUiDevice().pressBack();
        getUiDevice().pressBack();
        	
        sleep(2000);
        
        // 打開APP
        if (appsTab.exists()) {
        	appsTab.clickAndWaitForNewWindow();
        	sleep(5000);
		}
        	
        // 進入我的頁面
        UiObject myTab = new UiObject(new UiSelector().text("我的"));
        myTab.clickAndWaitForNewWindow();

        //設置循環次數
        for(int i =20; i > 0; i--){
        // 進入登錄頁
        UiObject Login = new UiObject(new UiSelector().resourceId("com.iflytek.smartzone:id/mine_login_layout"));
        if (Login.exists()) {			
        	Login.clickAndWaitForNewWindow();
        	// 輸入用戶名密碼
        	UiObject username = new UiObject(new UiSelector().resourceId("com.iflytek.smartzone:id/login_editUser"));
        	username.clearTextField();
        	username.setText("18019900009");
        	UiObject passwd = new UiObject(new UiSelector().resourceId("com.iflytek.smartzone:id/login_editPassword"));
        	passwd.clearTextField();
        	passwd.setText("111111");
        	//點擊登錄按鈕
        	UiObject login = new UiObject(new UiSelector().text("登錄"));
        	login.clickAndWaitForNewWindow();
		}
        
        //登出
        UiObject myinfo = new UiObject(new UiSelector().resourceId("com.iflytek.smartzone:id/mine_head_layout"));
        myinfo.click();
        UiObject loginout = new UiObject(new UiSelector().resourceId("com.iflytek.smartzone:id/person_info_exitlogin"));
        loginout.click();
        UiObject okbt = new UiObject(new UiSelector().text("確認退出"));
        okbt.clickAndWaitForNewWindow();
        }
    }
}

5.編譯測試用例 在編譯之前我們先要生成build.xml,生成方法如下:  
/tools/android create uitest-project -n  -t 3 -p 
其中是包含uiautomator測試源文件的測試項目名稱,是對應的測試項目目錄的路徑。 -t 後面的參數是android版本在當前sdk中的target值,通常一個sdk中我們會下載多個版本的android platform 可以通過一下命令查看:
/tools/android list
  輸出如下: view plaincopy to clipboardprint?
  1. AvailableAndroidtargets:----------id:1or"android-16"Name:Android4.1.2Type:PlatformAPIlevel:16Revision:4Skins:WQVGA400,WSVGA,WXGA800,HVGA,WVGA854,QVGA,WVGA800(default),WQVGA432,WXGA720,WXGA800-7inTag/ABIs:default/armeabi-v7a----------id:2or"android-19"Name:Android4.4.2Type:PlatformAPIlevel:19Revision:3Skins:WQVGA400,WSVGA,WXGA800,HVGA,WVGA854,QVGA,WVGA800(default),WQVGA432,WXGA720,WXGA800-7inTag/ABIs:default/armeabi-v7a----------id:3or"android-20"Name:Android4.4WType:PlatformAPIlevel:20Revision:1Skins:WQVGA400,WSVGA,WXGA800,HVGA,WVGA854,QVGA,WVGA800(default),WQVGA432,WXGA720,WXGA800-7in,AndroidWearRound,AndroidWearSquare,AndroidWearRound,AndroidWearSquareTag/ABIs:android-wear/armeabi-v7a,android-wear/x86
    這裡應該和之前添加Library選擇的一致或更新,所以-t 後面我寫的是1.   運行後輸出如下:
    Updated file D:\Users\qxb-810\workspace\MessageTestCase\build.xml

    到此,build.xml已經生成完畢,下面我們進入到工程目錄下進行編譯:
    ant build
    \ \
    然後將這個jar文件拷貝到手機的/data/local/tmp/ 目錄中:
    adb push D:\Users\qxb-810\workspace\MessageTestCase\bin\MessageTestCase.jar /data/local/tmp
      最後在手機裡面執行這個case即可:  
    adb shell uiautomator runtest MessageTestCase.jar -c com.iflytek.test.MessageTestCase
    \ \    
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved