Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android測試工具MonkeyRunner--google官網翻譯

android測試工具MonkeyRunner--google官網翻譯

編輯:關於Android編程

最近在復習之前的筆記,在回顧MonkeyRunner時看了看google官網的內容,寫得不錯,就翻譯出來分享下。其實google官網真是一個學習的好地方。

基礎知識

MonkeyRunner工具提供了一個API用於在Android代碼之外控制Android設備和模擬器。通過MonkeyRunner,您可以寫出一個Python程序去安裝一個Android應用程序或測試包,運行它,向它發送模擬擊鍵,截取它的用戶界面圖片,並將截圖存儲於工作站上。monkeyrunner工具的主要設計目的是用於測試功能/框架水平上的應用程序和設備,或用於運行單元測試套件,但您當然也可以將其用於其它目的。
MonkeyRunner工具與monkey工具並無關聯。monkey工具直接運行在設備或模擬器的adbshell中,生成用戶或系統的偽隨機事件流。而MonkeyRunner工具則是在工作站上通過API定義的特定命令和事件控制設備或模擬器。
MonkeyRunner工具為Android測試提供了以下特性:

多設備控制:MonkeyRunner的API可以跨多個設備或模擬器實施測試套件。您可以在同一時間接上所有的設備,也可以一次啟動全部模擬器,依據程序來依次連接到每個設備,然後運行一個或多個測試。您也可以用程序啟動一個配置好的模擬器,運行一個或多個測試。

功能測試:MonkeyRunner可以為一個應用自動貫徹一次功能測試。您提供按鍵或觸摸事件的輸入數值,然後觀察輸出結果的截屏。

回歸測試:MonkeyRunner可以運行某個應用,並將其結果截屏與既定已知正確的結果截屏相比較,以此測試應用的穩定性。

可擴展的自動化:由於MonkeyRunner是一個API工具包,您可以基於Python模塊和程序開發一整套系統,以此來控制Android設備。除了使用MonkeyRunner的API之外,您還可以使用標准的Python os和subprocess模塊來調用如adb這樣的Android工具。

您還可以向MonkeyRunnerAPI中添加您自己的類。我們將在後面會對此進行詳細討論。
MonkeyRunner工具使用Jython(使用Java編程語言的一種Python實現)。Jython允許MonkeyRunner API與Android框架輕松的進行交互。使用Jython,您可以使用Python語法來獲取API中的常量、類以及方法。

一個簡單的MonkeyRunner程序實例

以下為一個簡單的MonkeyRunner程序,它將會連接到一個設備,創建一個MonkeyDevice對象。使用MonkeyDevice對象,程序將安裝一個Android應用包,運行其中一個活動,並向其發送按鍵事件。程序接下來會將結果截圖,創建一個MonkeyImage對象,並使用這個對象截圖將保存至.png文件。

# 導入此程序所需的MonkeyRunner模塊 
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice 
# 連接當前設備,返回一個MonkeyDevice對象 
device = MonkeyRunner.waitForConnection() 
# 安裝Android包,注意,此方法返回的返回值為boolean,由此您可以判斷安裝過程是否正常 
device.installPackage('myproject/bin/MyApplication.apk') 
# 運行此應用中的一個活動 device.startActivity(component='com.example.android.myapplication.MainActivity') 
# 按下菜單按鍵 
device.press('KEYCODE_MENU','DOWN_AND_UP') 
# 截取屏幕截圖 
result = device.takeSnapShot
# 將截圖保存至文件 
result.writeToFile('myproject/shot1.png','png')

MonkeyRunner 的API

MonkeyRunner 在com.android.monkeyrunner包中總共包含三個模塊:

MonkeyRunner:一個為monkeyrunner程序提供工具方法的類。這個類提供了用於連接monkeyrunner至設備或模擬器的方法。它還提供了用於創建一個monkeyrunner程序的用戶界面以及顯示內置幫助的方法。

MonkeyDevice :表示一個設備或模擬器。這個類提供了安裝和卸載程序包、啟動一個活動以及發送鍵盤或觸摸事件到應用程序的方法。您也可以用這個類來運行測試包。

MonkeyImage :表示一個截圖對象。這個類提供了截圖、將位圖轉換成各種格式、比較兩個MonkeyImage對象以及寫圖像到文件的方法。

在python程序中,您將以Python模塊的形式使用這些類。monkeyrunner工具不會自動導入這些模塊。您必須使用類似如下的from語句:

  fromcom.android.monkeyrunner import

其中,為您想要導入的類名。您可以在一個from語句中導入超過一個模塊,其間以逗號分隔。

運行MonkeyRunner

您可以直接使用一個代碼文件運行MonkeyRunner,抑或在交互式對話中輸入MonkeyRunner語句。不論使用哪種方式,您都需要調用SDK目錄的tools子目錄下的MonkeyRunner命令。如果您提供一個文件名作為運行參數,則MonkeyRunner將視文件內容為Python程序,並加以運行;否則,它將提供一個交互對話環境。
MonkeyRunner命令的語法為:

monkeyrunner -plugin  <程序文件名> <程序選項>

-plugin : (可選)指定一個內含MonkeyRunner插件的.jar文件。欲了解更多關於monkeyrunner插件的內容,參考下文。要指定多個文件,可以多次使用此參數。

<程序文件名>: 如果您指定此參數,MonkeyRunner將視文件內容為Python程序並予以執行。如果此參數未予指定,則開啟一個交互式會話。

<程序選項>:(可選)<程序文件名>中所指定的程序所需的參數。

MonkeyRunner提供幫助

您可以用以下命令來生成monkeyrunner的API參考:

monkeyrunner  help.py 

參數說明:
可以為text或html,分別代表純文本和HTML輸出。
指定了輸出文件的全路徑名稱。

使用插件擴展MonkeyRunner

您可以用Java語言創建新的類,並打包成一個或多個.jar文件,以此來擴展 MonkeyRunner API。您可以使用您自己寫的類或者繼承現有的類來擴展MonkeyRunner API。您還可以使用此功能來初始化MonkeyRunner環境。
為了使MonkeyRunner加載一個插件,您應當如使用如前面所述的-plugin參數來調用MonkeyRunner命令。

在您編寫的插件中,您可以導入或繼承位於com.android.monkeyrunner包中的幾個主要的monkeyrunner類:MonkeyDevice, MonkeyImage和MonkeyRunner。

請注意,插件無法讓你訪問Android的SDK。您不能導入com.android.app等包。這是因為monkeyrunner是在框架API層次之下與設備或模擬器進行交互的。

插件啟動類

用於插件的.jar文件可以指定一個類,使其在腳本執行之前就實例化。如欲指定這個類,您需要在.jar文件的manifest中添加鍵 MonkeyRunnerStartupRunner。其值為啟動時運行的類的名稱。以下代碼段顯示了如何在一個ant構建腳本達到這樣的目的:






如欲訪問MonkeyRunner的運行時環境,啟動類可以實現com.google.common.base.Predicate。例如,用這個類在默認的命名空間中設置一些變量:

package com.android.example;

 import com.google.common.base.Predicate;
 import org.python.util.PythonInterpreter;

 public class Main implements Predicate {
     @Override
     public boolean apply(PythonInterpreter anInterpreter) {

         /*
         * Examples of creating and initializing variables in the monkeyrunner environment's
         * namespace. During execution, the monkeyrunner program can refer to the variables "newtest"
         * and "use_emulator"
         *
         */
         anInterpreter.set("newtest", "enabled");
         anInterpreter.set("use_emulator", 1);

         return true;
     }
 }

MonkeyRunner到此翻譯完,用好自動化測試框架對android開發有很大幫助。

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