每個新測試模組都必須有設定檔,才能使用模組中繼資料、編譯時間依附元件和封裝指令,引導建構系統。Android 現在使用 Soong 建構系統,可簡化測試設定。
Soong 會使用 Blueprint 或 .bp
檔案,這些檔案是類似 JSON 的簡單宣告式模組說明,用於建構模組。這個格式會取代先前版本使用的 Make 系統。如需完整詳細資料,請參閱持續整合資訊主頁上的 Soong 參考檔案。
如要進行自訂測試或使用 Android Compatibility Test Suite (CTS),請改為按照複雜測試設定操作。
範例
以下項目來自這個範例藍圖設定檔: /platform_testing/tests/example/instrumentation/Android.bp
為方便起見,我們在此附上快照:
android_test {
name: "HelloWorldTests",
srcs: ["src/**/*.java"],
sdk_version: "current",
static_libs: ["androidx.test.runner"],
certificate: "platform",
test_suites: ["device-tests"],
}
請注意,開頭的 android_test
宣告表示這是測試。
如果包含 android_app
,則表示這是建構套件。
設定
以下設定將提供說明:
name: "HelloWorldTests",
指定 android_test
模組類型時 (在區塊開頭),必須提供 name
設定。為模組命名,產生的 APK 也會採用相同名稱,並加上 .apk
後置字串,例如本例中產生的測試 APK 名稱為 HelloWorldTests.apk
。此外,這也會定義模組的 make 目標名稱,因此您可以使用 make [options]
<HelloWorldTests>
建構測試模組及其所有依附元件。
static_libs: ["androidx.test.runner"],
static_libs
設定會指示建構系統將具名模組的內容併入目前模組產生的 APK。也就是說,每個具名模組都應產生 .jar
檔案,其內容會用於在編譯期間解析類別路徑參照,並併入產生的 APK 中。
androidx.test.runner
模組是 AndroidX Test Runner 程式庫的預先建構版本,其中包含測試執行器 AndroidJUnitRunner
。AndroidJUnitRunner
支援 JUnit4 測試架構,並在 Android 10 中取代 InstrumentationTestRunner
。如要進一步瞭解如何測試 Android 應用程式,請參閱「在 Android 上測試應用程式」一文。
如果您要建構新的檢測設備模組,請一律以 androidx.test.runner
程式庫做為測試執行器。平台來源樹狀結構也包含其他實用的測試架構,例如 ub-uiautomator
、mockito-target
、easymock
等。
certificate: "platform",
certificate
設定會指示建構系統使用與核心平台相同的憑證簽署 APK。如果測試使用受簽章保護的權限或 API,就必須提供這項資訊。請注意,這適用於平台持續測試,但不應用於 CTS 測試模組。請注意,這個範例使用這項憑證設定僅為說明之用:範例的測試程式碼實際上不需要使用特殊平台憑證簽署測試 APK。
如果您要為系統伺服器外部的元件編寫插樁,也就是說,該元件的封裝方式與一般應用程式 APK 差不多,但會建構到系統映像檔中,而且可能是具備特殊權限的應用程式,那麼插樁很可能會以元件的應用程式套件為目標 (請參閱下方的資訊清單章節)。在這種情況下,應用程式的 makefile 可能會有自己的 certificate
設定,而插樁模組應保留相同的設定。這是因為如要以受測試應用程式為檢測設備目標,測試 APK 和應用程式 APK 必須使用相同憑證簽署。
在其他情況下,您完全不需要這項設定:建構系統會根據建構變體,使用預設的內建憑證簽署,通常稱為 dev-keys
。
test_suites: ["device-tests"],
test_suites
設定可讓 Trade Federation 測試架構輕鬆探索測試。您可以在這裡新增其他套件 (例如 CTS),以便共用這項測試。
${ANDROID_PRODUCT_OUT}/testcases/HelloWorldTests/HelloWorldTests.apk
選用設定
以下選用設定的說明:
test_config: "path/to/hello_world_test.xml"
test_config
設定會指示建構系統,測試目標需要特定設定。根據預設,Android.bp
旁的 AndroidTest.xml
會與設定建立關聯。
auto_gen_config: true
auto_gen_config
設定會指出是否要自動建立測試設定。如果 Android.bp
旁邊沒有 AndroidTest.xml
,則不需要明確將這個屬性設為 true。
require_root: true
require_root
設定會指示建構系統將 RootTargetPreparer 新增至自動產生的測試設定。這樣可確保測試以根層級權限執行。
test_min_api_level: 29
test_min_api_level
設定會指示建構系統將 MinApiLevelModuleController 新增至自動產生的測試設定。當 Trade Federation 執行測試設定時,如果裝置屬性為 ro.product.first_api_level
< test_min_api_level
,系統就會略過測試。