首先閱讀在developer.android.com 上測試您的應用程序。請注意,在平台測試中使用儀器測試的方式存在一些差異。
總之,插裝測試提供了一個通過am instrument
命令啟動的特殊測試執行環境,其中目標應用程序進程使用基本應用程序上下文重新啟動並初始化,並且插裝線程在應用程序進程 VM 內啟動。您的測試代碼開始在此檢測線程上執行,並提供一個Instrumentation
實例,該實例提供對應用程序上下文和 API 的訪問,以操作被測應用程序進程。
關鍵概念
- 必須在應用程序包中聲明檢測,並在應用程序包清單的
<manifest>
標記下嵌套<instrumentation>
標記。 - 從技術上講,應用程序包清單可能包含多個
<instrumentation>
標記,儘管這種方式並不常用。 - 每個
<instrumentation>
必須包含:-
android:name
屬性:它應該是測試應用程序中包含的Instrumentation
子類的名稱,通常是正在使用的測試運行程序,例如:android.support.test.runner.AndroidJUnitRunner
- 必須定義
android:targetPackage
屬性。其值應設置為正在測試的應用程序包。
-
步驟總結
以下是針對框架服務進行密封測試的常見目的地:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
如果您要為組件添加全新的儀表模塊,請參閱
如果要將測試添加到上述位置之一,請遵循現有約定。如果您要設置新的測試模塊,請按照上述位置之一中的
AndroidManifest.xml
和Android.mk
設置有關示例,請參閱Frameworks/base/core/tests/coretests/ 。請注意這些行會安裝額外的應用程序:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
不要忘記將您的測試標記為
@SmallTest
、@MediumTest
或@LargeTest
用 m 構建測試模塊,例如:
m FrameworksCoreTests
運行測試:
最簡單的解決方案是像這樣使用Atest :
atest FrameworksCoreTests
或者對於更複雜的測試,請使用Trade Federation test Harness :
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
如果不使用 Tradefed,請手動安裝並運行測試:
- 安裝生成的apk:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
使用各種選項運行測試:
apk中的所有測試
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
特定Java包下的所有測試
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
特定類別下的所有測試
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
具體的測試方法
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
您的測試可以使用JUnit
API 對通過或失敗做出明確的斷言;此外,任何未捕獲的異常也會導致功能故障。
要發出性能指標,您的測試代碼可以調用Instrumentation#sendStatus
來發送鍵值對列表。需要注意的是:
- 指標可以是整數或浮點
- 任何非數字值都將被丟棄
- 您的測試 apk 可以是功能測試或指標測試,但是當前不支持混合兩者