儀器測試

首先閱讀測試您的應用程序上developer.android.com。請注意,在平台測試中使用儀器測試的方式存在一些差異。

總之,一個儀器測試提供經由專門推出了測試執行環境am instrument命令,其中目標應用進程重新啟動,並與基本的應用程序上下文初始化,以及儀表線程的應用程序啟動過程虛擬機中。您的測試代碼開始對這個儀器線程執行並設有Instrumentation實例,提供訪問應用程序上下文和API來操作測試的應用程序的過程。

關鍵概念

  • 儀表必須的應用程序包中聲明,用<instrumentation>下嵌套標籤<manifest>應用程序包清單的標記。
  • 應用程序包清單可能在技術上包含多個<instrumentation>標籤,儘管它不是通常以這種方式使用。
  • 每個<instrumentation>必須包含:
    • 一個android:name屬性:它應該是的一個子類的名稱Instrumentation那中包含的測試應用程序,這通常是真實使用的測試運行,例如: android.support.test.runner.AndroidJUnitRunner
    • 一個android:targetPackage屬性必須被定義。其值應設置為被測應用程序包。

步驟總結

  1. 以下是針對框架服務進行密封測試的常見目的地:

    frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
    

    如果您要為組件添加全新的儀器模塊,請參閱

  2. 如果要將測試添加到上述位置之一,請遵循現有約定。如果你正在建立一個新的測試模塊,請遵循的設置AndroidManifest.xmlAndroid.mk在上面的位置之一

  3. 框架/鹼/核心/測試/ coretests /為例。請注意這些行安裝額外的應用程序:

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. 不要忘記,以紀念測試作為@SmallTest@MediumTest@LargeTest

  5. 使用 m 構建測試模塊,例如:

    m FrameworksCoreTests
    
  6. 運行測試:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. 如果不使用 Tradefed,請手動安裝並運行測試:

    1. 安裝生成的apk:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    

    提示:你使用adb shell pm list instrumentation找到剛剛安裝的APK內部控制儀表

    1. 使用各種選項運行測試:

      1. apk 中的所有測試

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. 特定 Java 包下的所有測試

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. 特定類下的所有測試

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. 特定的測試方法

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest#testCancel \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        

您的測試可以對通過一個明確的斷言或使用失效JUnit的API;此外,任何未捕獲的異常也會導致功能故障。

為了發出性能指標,測試代碼可以調用Instrumentation#sendStatus發出鍵-值對的列表。需要注意的是:

  1. 指標可以是整數或浮點數
  2. 任何非數字值都將被丟棄
  3. 您的測試 apk 可以是功能測試或指標測試,但目前不支持將兩者混合