Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android測試:UI automator

android測試:UI automator

編輯:關於Android編程

一、UI automator的簡介

Uiautomator,顧名思義,是用於ui自動化測試的,主要是仿真單擊,滑動,輸入文本等操作,而不用人為地進行操作,特對對於兼容測試來說,如果把一組反復進行的操作用uiautomator實現,那麼將大大提高效率。

同時如果條件允許,可以開啟眾多進程每個進程連接一台虛擬機對軟件進行性能測試(訪問量性能測試)。

二、UI automator的環境配置

2.1 配置android環境

2.2 配置Ant

三、UI automator的測試

3.1 UI Automator Viewer

UI automator Viewer軟件可以對手機現時的截圖進行控件分析其ID進行定位。UI Automator Viewer位於…/sdk/tools目錄下面,如D:\android-sdk-windows\tools。點擊打開uiautomatorviewer.bat如下圖所示:

\

 

圖表1

\

 

圖表2

其中對於該軟件的基本運用見圖表2,左起第一個按鈕是導入文件,可以導入文件uix格式和png格式進行分析;第二個按鈕是錄制按鈕,是對屏幕的截圖,對截圖進行控件分析;第三個按鈕和第二個按鈕功能相同,不同是屏幕截圖進行了壓縮;第四個按鈕是對屏幕截圖的保存,可以輸出成uix格式和png格式的文件。

 

3.2 代碼測試的環境設置

在配置好的android環境中打開IDE(eclipse或者android studio都行),創建一個java項目,注意不是android項目!

下面以在eclipse的操作進行講解:

(1)首先創建好java項目後導入依賴包:見圖表3.具體操作為打開項目的Properties,選取Java BuildPath,在Libraries欄中ADD ExternalJARs中導入android.jar和uiautomator.jar倆個第三方包,位置位於…/sdk/platforms/android-xxx.,注意選取android-18以上的版本,後續代碼操作api很多是18以前所缺少的。在Add Library中導入JUnit 4,eclipse已經配置好。

\

 

圖表3

(2)其次編寫代碼,編寫代碼的過程見四UI automator的參考案例,此處只談環境配置。此時你可以看見項目的結構如果類似圖表4,則證明已經配置成功。

\

 

圖表4

(3)對用例項目進行編譯。此時編譯測試用例的uiautomator的編譯工具是Ant,在編譯之前我們要先生成build.xml。

生成方法為:進入…/sdk/tools目錄下,使用命令行:

android create uitest-project -n -tx-p

此時name表示你的項目的名字,輸入對應的名字,-t表示target,對應版本號,也就是x,表示上文中你選取的android-xx對應的編號,-p是路徑,是你的項目的具體路徑(絕對路徑)。

target x在每台電腦中都可能不一樣,在第一次運行時需要查閱。輸入命令:android list,具體結果見圖表5:

\

 

圖表5

見圖表5,例如選取的是android-19,此時id為18,即x為18。運行後輸出結果無異常即可以進入下一步。(異常通常原因是輸入路徑或者名稱有錯誤)

然後進入到項目路徑進行編譯,輸入ant build,見圖表6:

\

 

圖表6

此時顯示編譯成功,在項目的bin文件夾會生成項目名.jar。

(4)導入文件進行執行。此時我們首先要把該jar文件拷貝到手機的/data/local/tmp/ 目錄中。,命令如下:

adbpush F:\android學習1\client\bin\client.jar/data/local/tmp(文件名要改成自己的)

\

 

圖表7

此時見圖7可以發現已經導入成功,生成文件為client.,注意並不是client.jar。

此時我們便可以運行用例對軟件進行測試,輸入命令行:adb shell uiautomatorruntest client. -c test.login。-c後面的test.login是java中包名.class名,表明運行某個用例。

此時見圖8則完成了測試,斷言函數的輸出也是在cmd中,返回看見OK表示測試成功,此用例表明了對渠道通app進行了登錄測試:

\

 

圖表8

 

 

四、UI automator的參考案例

4.1 核心類

此處重點介紹一下用例編寫的核心類,主要包括UiDevice、UiSelector以及UiObject三種。

 

(1)UiDevice代表設備狀態。在測試時,可以調用UiDevice實例的方法來檢查不同屬性的狀態,如當前的屏幕旋轉方向貨展示大小。測試代碼還能使用UiDevice實例來執行設備級的操作,如強制設備橫豎屏,按壓d-pad硬件按鈕,或按壓主屏幕鍵和菜單鍵。
獲取UiDevice實例,模擬按壓主屏幕鍵的代碼如下:getUiDevice (). pressHome ();

 

(2) UiSelector代表一種搜索標准,可以在當前展示界面上查詢和獲取特定元素的句柄。若找到多於一個的匹配元素,則返回布局層次結構上的第一個匹配元素作為目標UiObject。當構造一個UiSelector對象時,可以使用鏈式調用多個屬性來縮小查詢范圍。如無匹配元素,則返回異常 UiAutomatorObjectNotFoundException 。你還可以使用childSelector()來嵌套多個Uiselector實例。

UiSelector()常用的方法有resourceId(),根據ID才定位控件;index(),根據索引定位控件。見圖表9,在上文所述的UI Automator Viewer可以找到resource-id和index:

\

 

圖表9

 

(3) UiObject代表一個UI元素。為創建一個UiObject實例,使用用來描述如何搜索、選定UI元素的UiSelector實例。如:UiObject account=new UiObject(newUiSelector().resourceId("cn.com.do1.qyw.account.manager:id/text_userName"));

 

4.2 斷言函數

斷言函數判斷被測試的方法是否按照預期的效果正常工作。

斷言函數輸出是在命令行輸出,也可以導出為一個文件。

 

4.3 代碼編寫

packagetest;
import java.io.IOException;
import android.os.RemoteException;

import com.android.uiautomator.core.UiDevice;

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 classlogin extendsUiAutomatorTestCase //繼承

{



public void testDemo() throws RemoteException,UiObjectNotFoundException

{

UiDevicedevice=getUiDevice();//獲得系統服務

device.wakeUp();//喚醒屏幕

device.pressHome();//系統主界面

sleep(1000);//暫停1000ms



try

{

Runtime.getRuntime().exec("am start -ncn.com.do1.qyw.account.manager/cn.com.do1.qyw.account.activity.home.MainActivity");//啟動具體的包和activity

}

catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

sleep(1000);



UiObjectaccount=newUiObject(newUiSelector().resourceId("cn.com.do1.qyw.account.manager:id/text_userName"));//句柄返回一個界面控件對象



assertTrue("賬戶的控件無法找到!", account.exists());

sleep(100);



UiObjectpassword=newUiObject(newUiSelector().resourceId("cn.com.do1.qyw.account.manager:id/text_password"));

assertTrue("密碼控件無法找到!",password.exists());

sleep(100);



UiObjectloginButton=newUiObject(newUiSelector().resourceId("cn.com.do1.qyw.account.manager:id/sumbit"));

assertTrue("登陸按鈕無法找到",loginButton.exists());



UiObjectfailLogin =newUiObject(newUiSelector().resourceId("cn.com.do1.qyw.account.manager:id/btn_ok"));



//account.setText("");

//account.setText("chenjianping"+"6".toString());



sleep(100);

password.setText("NICO0816q");

sleep(100);

loginButton.click();

sleep(100);



if (failLogin.exists())

{

assertTrue("登陸失敗!檢測賬戶密碼!",failLogin.exists());

return;

}



//enter the Main home

UiObjectuserName=newUiObject(newUiSelector().resourceId("cn.com.do1.qyw.account.manager:id/tv_username"));

assertTrue("user_name控件不存在!",userName.exists());

sleep(100);



if(userName.getText().toString()==null||(userName.getText().toString().equals("")))

{

assertTrue("用戶名無法顯示!", userName.exists());
}

}
}

 

 

五、UI automator的總結

能很好的做功能測試,比起monkeyrunner來說性能優越很多。後者錄制腳本會卡頓若按id找尋控件真機測試還要root,特別麻煩,而且monkeyrunner沒有斷言函數。對比其余測試工具來說是真的是易學好用。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved