每個新的測試模組都必須有一個設定檔,以透過模組中繼資料、編譯時間依附元件和封裝操作說明來引導建構系統。Android 現已使用 Soong 建構系統,可簡化測試設定。
Soong 使用的是藍圖或 .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
檔案,其內容會在編譯期間用於解析 classpath 參照,並整合至產生的 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
設定會指出是否要自動建立測試設定。如果 AndroidTest.xml
不位於 Android.bp
旁邊,則不需要明確將這個屬性設為 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
,系統會略過該測試。