【Android測試】【第十一節】Uiautomator——簡介


版權聲明:本文出自胖喵~的博客,轉載必須注明出處。

   轉載請注明出處:http://www.cnblogs.com/by-dream/p/4872244.html

 

 

前言


  在App的測試中,除了單元測試來保證Andr​​oid應用程序的各個組件(例如activities、services和content providers),測試用戶在應用程序界面的行為也是非常重要的一部分UI測試(UI Testing)可確保用戶在一系列操作過程中(例如鍵盤輸入、點擊菜單、彈出對話框、圖像顯示以及其他UI控件的改變),你的應用程序做出正確的UI響應

  谷歌UI測試(UI Testing)文檔:http://android.toolib.net/tools/testing/testing_ui.html  

  UI測試(功能測試、黑盒測試)不需要測試者了解應用程序的內部實現細節,只需要知道當執行了某些特定的動作后是否會得到其預期的輸出。這種測試方法,在團隊合作中可以更好地分離的開發和測試角色。

  常見的UI測試的方法是手動去執行,然后去驗證程序是否達到的預期的效果,很顯然這種方法耗時、繁瑣並且很容易出錯。因此我們需要一種可靠的方法來進行UI測試,通過測試框架,我們可以完成針對具體使用場景的測試用例,然后可以循環的、自動的來運行我們的測試case

 

 

概述


  Android的SDk提供了以下的工具來支持我們進行UI自動化測試:

    uiautomatorviewer:一個用來掃描和分析Android應用程序的UI控件的GUI工具。

    uiautomator:一個包含創建測試、執行自動化測試API的java庫。(照例送上谷歌Uiautomator文檔:http://android.toolib.net/tools/help/uiautomator/index.html 

  要使用這些工具,你必須安裝Android開發工具以下版本:

  Android SDK Tools:API 21 版本或者21以上版本;

  Android SDK Platform:API 16 版本或者16以上版本.

 

Uiautomator測試框架的工作流程

  下面是自動UI測試所需的步驟的簡短概述:

  1、安裝待測應用到手機,通過uiautomatorviewer分析應用程序界面的控件,並確保應用程序的控件可以被自動化框架訪問。

  2、創建自動化測試用例來模擬你和應用程序之間交​​互的步驟。

  3、將測試用例編譯成一個JAR文件,並發動到應用程序安裝的那台測試設備​上。

  4、運行測試,查看測試結果。

  5、修改測試過程中發現的bug。

 

 

分析控件


  在你開始寫測試用例之前,使用uiautomatorviewer可以幫助你熟悉你的UI組件(包括視圖和控件)。你可以使用它對當前連接到你電腦上的手機屏幕進行一個快照,然后可以看到手機當前頁面的層級關系每個控件的屬性。利用這些信息,你可以寫出針對特定UI控件的測試用例。

   在 ..\sdk\tools\ 目錄下打開 uiautomatorviewer.bat (打開前請手機連接電腦)

  

  想必大家看了上面的動態圖,基本上已經了解了一些用法了吧,我再進一步說明一下:

 

  1、獲取快照

    當你要分析一個頁面時,首先將手機的頁面停留在你要分析的頁面,然后用數據線連接電腦。然后點擊uiautomatorviewer左上角的第二個圖標按鈕 Device Screenshot,點擊之后會將當前手機界面的快照更新到這里來。

  2、頁面層級

    右上方的整個區域,就是當前頁面布局的層級關系。如果對Android五大布局比較熟悉的話,理解這一層應該不是問題。

  3、不可用區域

    右上方的整個區域中的第二個按鈕Toggle NAF Nodes,按下后出現的黃色區域代表,這些控件是不被Uiautomator工具識別,無法獲取到這些控件的實例。以QQ首頁為例。

    我們可以看到,當按下該按鈕的時候,下方的三個tab出現黃色區域,這就代表這三個區域的控件,如果你想通過Uiautomator提供的API來獲得他們的屬性,或者對其進行點擊操作,是做不到的,因為你沒辦法拿到這些控件的實例。

  4、屬性詳情

    右下方的整個區域,是當前選中的頁面或者是控件的屬性信息。這部分比較重要,我們以后寫代碼的時候就是需要通過查看屬性中的控件的id或者是text等來獲取控件的實例,然后點擊操作它。

     以QQ左上角的頭像控件為例: 

    點擊左上角的頭像控件之后,右下方區域就會顯示這個控件的詳細信息。比如這里我們可以得知它的resource-id就是com.tencent.mobileqq:id/conversation_head。

    然后利用Uiautomator的API方法就可以得到該控件的實例。

// 通過id來創建出UiSelector 對象
UiSelector =  new UiSelector().resourceId("com.tencent.mobileqq:id/conversation_head");
// 通過UiSelector 對象    創建出 UiObject  對象    
UiObject switcher = new UiObject(uiSelector );        
// 判斷該控件是否存在
if (switcher.exists())
{
     //點擊該控件  
    switcher.click();
}

    上面的方法就是知道了該控件的id之后,模擬點擊該控件的過程,當然Uiautomator還提供了根據text來獲取控件。

    這種點擊的方法比起Monkeyrunner來說它的好處就是:Monkeyrunner是坐標點擊,當一個腳本寫好后,換一個分辨率的手機去執行,點擊的位置可能就會出錯,而Uiautomator點擊是先找到該控件,然后再點擊該控件,因此可移植性比Monkeyrunner要好;另外代碼的易讀性也更好一些

 

 

環境搭建


  網上關於環境搭建的內容很多,也非常的詳細,這里我就簡單的說下大體流程和注意事項吧。   隨手找了一個別人寫的環境搭建的文章。直接參考即可: http://www.testwo.com/blog/7057

 

  1、在Eclipse中建立一個Java的工程。

  2、右鍵選中你建立的工程,在Properties > Java Build Path中:

    a、點擊 Add Library > JUnit 添加JUnit3/4

    b、點擊Add External JARs... 導入 uiautomator.jar and android.jar 這兩個jar包。

    這里需要注意,導入這兩個jar包的時候,注意Android的版本號,后面生成build.xml的時候需要知道你導入的這兩個jar是哪個sdk版本的。

  3、導入成功之后,就可以寫代碼了。代碼的格式參考下面:

package com.uia.example.my;

// Import the uiautomator libraries
import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiScrollable;
import com.android.uiautomator.core.UiSelector;
import com.android.uiautomator.testrunner.UiAutomatorTestCase;

public class yourclass extends UiAutomatorTestCase {   

   public void testDemo() throws UiObjectNotFoundException { 
    
         // 測試代碼
    
    }
}

  4、使用 android create uitest-project -n %工程名% -t 5 -p %工程目錄% 來生存build.xml文件。

    需要注意的就是 這里的 -t 后面的 5 就是Android list后對應的你當初引入兩個jar包的sdk版本對應的id。我的是 id: 5 or "android-19",所以我這里是5

    

  5、生成的build.xml 用ant工具進行編譯。編譯后會生成“工程名.jar”包(注意這里需要使用 ant build命令來打包,這樣有錯誤可以看到);

  6、將該jar包push到手機的 /data/local/tmp 目錄下

  7、在adb shell 中執行: uiautomator runtest 工程名.jar -c 包名.類名

  

  執行之后就可以,看到自動執行的效果了。下節將重點講解如何寫Uiautomator的代碼。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM