每個新的測試模塊都必須有一個配置文件,以使用模塊元數據、編譯時依賴項和打包指令來指導構建系統。 Android 現在使用Soong 構建系統進行更簡單的測試配置。
Soong 使用藍圖或.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: ["android-support-test"],
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: ["android-support-test"],
static_libs
設置指示構建系統將命名模塊的內容合併到當前模塊的結果 apk 中。這意味著每個命名模塊都應生成一個.jar
文件,其內容將用於在編譯期間解析類路徑引用,並合併到生成的 apk 中。
在這個例子中,通常對測試有用的東西:
android-support-test
是為 Android 測試支持庫預構建的,其中包括新的測試AndroidJUnitRunner
:替代現已棄用的內置InstrumentationTestRunner
,支持 JUnit4 測試框架。在 Android 上測試應用了解更多信息。
如果你正在構建一個新的檢測模塊,你應該總是從android-support-test
庫開始作為你的測試運行器。平台源代碼樹還包括其他有用的測試框架,如ub-uiautomator
、 mockito-target
、 easymock
等。
certificate: "platform",
certificate
設置指示構建系統使用與核心平台相同的證書對 apk 進行簽名。如果您的測試使用受簽名保護的權限或 API,則需要這樣做。請注意,這適用於平台連續測試,但不應在 CTS 測試模塊中使用。請注意,此示例僅出於說明目的使用此證書設置:示例的測試代碼實際上不需要使用特殊平台證書對測試 apk 進行簽名。
如果您正在為位於系統服務器之外的組件編寫工具,也就是說,它或多或少像常規應用程序 apk 一樣打包,只是它內置在系統映像中並且可能是特權應用程序,那麼您的工具很可能會以組件的應用程序包為目標(請參閱下面有關清單的部分)。在這種情況下,您的應用程序生成文件可能有自己的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 添加到自動生成的測試配置中。這保證了測試以 root 權限運行。
test_min_api_level: 29
test_min_api_level
設置指示構建系統將 MinApiLevelModuleController 添加到自動生成的測試配置中。 Trade Federation 運行測試配置時,如果ro.product.first_api_level
的設備屬性 < test_min_api_level
,則將跳過測試。