每個新的測試模組都必須有一個配置文件,以使用模組元資料、編譯時依賴項和打包指令來指導建置系統。 Android 現在使用Soong 建置系統來簡化測試配置。
Soong 使用 Blueprint 或.bp
文件,它們是要建立的模組的類似 JSON 的簡單聲明性描述。此格式取代了先前版本中使用的基於 Make 的系統。有關完整詳細信息,請參閱持續整合儀表板上的Soong 參考文件。
若要適應自訂測試或使用 Android相容性測試套件(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 測試運行器庫預先建立的,其中包括測試運行器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 新增到自動產生的測試配置中。這保證了測試以 root 權限運行。
test_min_api_level: 29
test_min_api_level
設定指示建置系統將 MinApiLevelModuleController 新增至自動產生的測試配置。當 Trade Federation 執行測試配置時,如果ro.product.first_api_level
< test_min_api_level
的裝置屬性,將跳過測試。