[轉]Android 使用者介面自動化測試

來源:互聯網
上載者:User

標籤:

介紹

Android測試支援庫包含UI自動化模組,它可以對Android應用進行自動黑箱測試。在API Level 18中引入了自動化模組,它允許開發人員在組成應用UI的控制項上模仿使用者行為。

在這個教程中,我將展示如何使用此模組來建立和執行一個基本的UI測試,選擇預設的計算機模組進行測試。

先決條件

在使用前,需要具備以下條件:

  1. 最新版本的Android Studio
  2. 運行Android 4.3或者更高版本的裝置或者虛擬器
  3. 理解JUnit
1. 安裝依賴庫

工程中使用UI自動化模組,需要編輯你的工程下app目錄下的檔案build.gradle,添加如下依賴:

androidTestCompile ‘com.android.support.test:runner:0.2‘                       androidTestCompile ‘com.android.support.test:rules:0.2‘                        androidTestCompile ‘com.android.support.test.uiautomator:uiautomator-v18:2.1.0‘

如果使用的是庫appcompat-v7 且其版本號碼是23.1.0,你需要添加如下依賴以確保應用本身和測試應用都使用相同版本的com.android.support:support-annotations:

androidTestCompile ‘com.android.support:support-annotations:23.1.0‘
2. 建立測試類別

建立一個新的測試類別,CalculatorTester,通過在 androidTest 目錄下建立名為CalculatorTester.java 的檔案實現。建立的UI自動化測試案例,必須繼承自InstrumentationTestCase

重寫setUp方法,並添加testAdd方法。到此CalculatorTester類定義如下:

  public class CalculatorTester extends InstrumentationTestCase{       @Override                                                      public void setUp() throws Exception {                           }                                                               public void testAdd() throws Exception {                         }                                                          }  
3、查看Launcher UI

串連你的Android裝置到電腦商,點擊home按鍵,進入主介面。

返回到你的電腦,使用檔案管理或者終端瀏覽你安裝Android SDK的目錄,進入到 tools目錄下,點擊 uiautomatorviewer 。這個會啟動 UI Automater Viewer ,你將看到如下介面:

點擊上方手機表徵圖來擷取Android裝置截屏。注意到此時擷取到的截屏是可互動的。點擊下面的Apps表徵圖。在右方的 Node Detail 地區,你就可以看到根據選擇表徵圖的不同顯示不同的詳細資料,如所示:

與螢幕上的應用互動,UI自動化測試需要能唯一識別它們。在這個教程中,可以使用應用的textcontent-desc或者class欄位來唯一的區分。

從可以看到Apps表徵圖沒有text欄位,但有content-desc。記下它的值,後面將用到這個值。

拿起Android裝置,觸摸Apps表徵圖,進入裝置安裝的所有應用介面。使用 UI Automater Viewe 擷取另外一張螢幕。因為要寫一個計算機應用的測試,點擊計算機表徵圖查看詳細介面。

這次content-desc是空的,但是text的值為Calculator,同樣記住這個值。

如果你的Android裝置運行不同的主介面或者不同的Android版本,介面和顯示的細節會有所不同。這意味著後續代碼中需要做一些修改,以匹配你的作業系統。

4、準備測試環境

返回到Android Studio,給setUp方法中添加代碼。如同其名字,setUp方法是用來準備測試環境的。換句話說,這個方法是在真正測試之前指定具體需要執行什麼動作的。

現在需要寫代碼來類比剛才在Android裝置上執行的幾個動作:
1、按home鍵進入主介面
2、按Apps表徵圖進入應用介面
3、點擊計算機表徵圖啟動它

在你的類中宣告類型為UiDevice的變數device。它代表你的Android裝置,後續使用它來類比使用者行為。

private UiDevice device;

setUp方法中,通過調用UiDevice.getInstance method來初始化device,傳遞Instrumentation執行個體,如下所示:

device = UiDevice.getInstance(getInstrumentation());

類比點擊裝置home鍵,需要調用pressHome方法。

device.pressHome();

接下來,需要類比點擊Apps表徵圖的動作。不能立即做這個動作,因為Android裝置需要一個反應時間來載入介面。如果在螢幕顯示出來之前執行這個動作就會引起運行時異常。

等待一些事情發生時,需要調用UiDevice執行個體的wait方法。等待Apps表徵圖顯示到螢幕,使用Until.hasObject方法。

識別Apps表徵圖需要使用By.desc方法並傳遞值為Apps的參數。你還需要指定最長等待時間,單位為毫秒。此處設定為3000。
至此形成如下程式碼片段:

device.wait(Until.hasObject(By.desc("Apps")), 3000);

要擷取Apps表徵圖的引用,需要使用findObject方法。一旦有了Apps表徵圖的引用,就可以調用click方法來類比點擊動作了。

UiObject2 appsButton = device.findObject(By.desc("Apps"));appsButton.click();

和前面一樣,我們需要等待一些時間,保證計算機表徵圖顯示到螢幕上。在之前的步驟中,我們看到可以通過text欄位唯一的識別計算機表徵圖。我們調用By.text方法來找到表徵圖,傳遞參數為Calculator

device.wait(Until.hasObject(By.text("Calculator")), 3000); 
5、檢查計算機UI

在你的Android裝置上啟動計算機應用,使用 UI Automater Viewer 來查看顯示。擷取到一個截屏後,點擊不同的按鈕來觀察使用何值可以唯一的區分它們。

在本次測試案例中,使用計算機計算 9+9= 的值並確認結果是否為 18。這意味著你需要知道怎麼區分按鍵 9、+ 和 =。

在我的裝置上,如下是我收集到的資訊:

  1. 數字按鍵匹配text
  2. + 和 = 使用content-desc值,分別對應 plus 和 equals
  3. 傳回值顯示在EditText控制項中

如果你使用不同版本的計算機應用,請注意這些值有可能不一樣。

6、建立測試類別

在前面幾步操作中,你已經學會了使用findObject方法通過By.text或者By.desc來擷取螢幕上不同對象的引用。還學會了通過click方法來類比點擊對象的動作。下面的代碼使用這些方法來類比 9+9=。添加這些到類CalculatorTester的方法testAdd中。

        device.wait(Until.hasObject(By.text("9")), 3000);        UiObject2 buttonNine = device.findObject(By.text("9"));        buttonNine.click();        UiObject2 buttonPlus = device.findObject(By.desc("plus"));        buttonPlus.click();        buttonNine.click();        UiObject2 buttonEquals = device.findObject(By.desc("equals"));        buttonEquals.click();

現在就等待運行結果。此處不能使用Until.hasObject,因為包含計算結果的EditText已經顯示在螢幕上了。取而代之,我們使用waitForIdle方法來等待計算完成。同樣,最長等待時間是3000毫秒。

device.waitForIdle(3000);

使用findObjectBy.clazz methods方法擷取EditText對象的引用。一旦有了此引用,就可以調用getText 方法來確定計算結果是否正確。

UiObject2 resultText = device.findObject(By.clazz("android.widget.EditText"));String result = resultText.getText();

最後,使用assertTrue來檢驗範圍值是否為18。

assertTrue(result.equals("18"));

測試到此結束。

6、執行測試

執行測試,需要在Android Studio的工具列中選擇CalculatorTester,點擊它右方的play按鈕。

一旦編譯結束,測試就成功運行完整。當測試回合時,在你的Android裝置上就會看到UI自動化運行介面。

7. 完整代碼
public class CalculatorTester extends InstrumentationTestCase {    private UiDevice device;    @Override    protected void setUp() throws Exception {        device = UiDevice.getInstance(getInstrumentation());        device.pressHome();        device.wait(Until.hasObject(By.desc("Apps")), 3000);        UiObject2 appsButton = device.findObject(By.desc("Apps"));        appsButton.click();        device.wait(Until.hasObject(By.text("Calculator")), 3000);        UiObject2 calButton = device.findObject(By.text("Calculator"));        calButton.click();        testAdd();    }    public void testAdd() throws Exception {        device.wait(Until.hasObject(By.text("9")), 3000);        UiObject2 buttonNine = device.findObject(By.text("9"));        buttonNine.click();        UiObject2 buttonPlus = device.findObject(By.desc("plus"));        buttonPlus.click();        buttonNine.click();        UiObject2 buttonEquals = device.findObject(By.desc("equals"));        buttonEquals.click();        device.waitForIdle(3000);        UiObject2 resultText = device.findObject(By.clazz("android.widget.EditText"));        String result = resultText.getText();        assertTrue(result.equals("18"));    }}
總結

在這篇教程中,我們學會了如何使用UI自動化測試模組和 UI Automater Viewer 來建立使用者介面測試。你也看到了使用Android Studio執行測試是如此簡單。雖然我們測試了一個相對簡單的應用,但可以將從中學到的概念用到幾乎所有Android應用的測試中。

你可以在Android 開發人員網站中 學習更多關於測試支援庫的知識。

[轉]Android 使用者介面自動化測試

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.