在調(diào)試CTS模塊之前鉴未,需先對Android中的測試有一定的了解,特別是colab上的教程扛邑,建議閱讀姻檀。
colab教程
測試應(yīng)用 | Android Studio | Android Developers
android中的測試分為:本地測試 和 插樁測試。
當使用android studio 創(chuàng)建一個新的 Android 項目時童芹,默認獲得以下源集涮瞻。
-
androidTest
:包含稱為instrumented測試的測試。插樁測試(androidTest源碼集)
這些測試在真實或模擬的 Android 設(shè)備上運行假褪,因此它們反映了現(xiàn)實世界中會發(fā)生什么署咽,但速度也慢得多。
-
test
:包含稱為本地測試的測試生音。本地測試(測試源集)
這些測試在開發(fā)機器的 JVM 本地運行宁否,不需要模擬器或物理設(shè)備窒升。正因為如此,他們跑得很快家淤,但他們的忠誠度較低异剥,這意味著他們的行為不像在現(xiàn)實世界中那樣。
CTS中的目錄結(jié)構(gòu)更復(fù)雜絮重。
目前有以下幾種方式冤寿,調(diào)試模塊。
am instrument
atset
源碼導(dǎo)入 android studio
1. am instrument
1.1 修改源碼
修改后(例如添加log)青伤。
1.2 編譯模塊
進入模塊目錄督怜,mma 編譯生成新的apk。如果想快一點就加上-j狠角,例如 mma -j20
号杠,具體加多少看機器配置。加太多有可能會崩掉丰歌。最后會在out/host/linux-x86/cts
目錄下生成姨蟋。
source build/envsetup.sh
lunch aosp_arm64
cd cts/tests/camera
mma
1.3 安裝apk
執(zhí)行adb install -g
安裝 apk.
adb install -g CtsCameraTestCases.apk
GitHub Copilot: 在 Android 兼容性測試套件(CTS)中,
cts-tradefed
工具使用 Android Debug Bridge(ADB)來與 Android 設(shè)備進行通信立帖,并在設(shè)備上運行測試用例眼溶。當cts-tradefed
工具需要在設(shè)備上安裝和運行測試應(yīng)用程序時,它會使用adb install
命令來安裝應(yīng)用程序晓勇,并使用adb shell
命令來啟動應(yīng)用程序堂飞。在 Android 系統(tǒng)中,當應(yīng)用程序需要訪問敏感權(quán)限(例如讀取聯(lián)系人或發(fā)送短信)時绑咱,系統(tǒng)會彈出一個對話框绰筛,詢問用戶是否授權(quán)該應(yīng)用程序訪問該權(quán)限。如果用戶授權(quán)了該權(quán)限描融,應(yīng)用程序就可以訪問該權(quán)限所需的功能铝噩。在 CTS 測試中,cts-tradefed
工具會自動授權(quán)測試應(yīng)用程序所需的權(quán)限窿克,以確保測試用例可以正確地執(zhí)行骏庸。這是因為在 CTS 測試中,測試應(yīng)用程序是由 CTS 測試框架自動安裝和運行的让歼,而不是由用戶手動安裝和運行的敞恋。因此丽啡,為了確保測試用例可以正確地執(zhí)行谋右,cts-tradefed
工具會自動授權(quán)測試應(yīng)用程序所需的權(quán)限。具體來說补箍,cts-tradefed
工具會在安裝測試應(yīng)用程序時改执,使用adb install -g
命令來安裝應(yīng)用程序啸蜜。-g
參數(shù)表示在安裝應(yīng)用程序時自動授予所有權(quán)限。這樣辈挂,當測試應(yīng)用程序在設(shè)備上運行時衬横,它就可以自動訪問所有需要的權(quán)限,而不需要用戶手動授權(quán)终蒂。
有時候apk無圖標蜂林,可以使用pm list
查看是否正常安裝。
pm list packages -e "camera"
如果執(zhí)行 adb install -r xx.apk
拇泣,后面執(zhí)行單元測試可能會報錯噪叙,這是由于需要permission。因此這種情況最好還是執(zhí)行 -g去安裝apk霉翔。如果執(zhí)行 adb install -r xx.apk
睁蕾,在 settings里面打開camera的權(quán)限后,即可正常運行债朵。
如需卸載可使用 adb uninstall
子眶。包名可在AndroidManifest.xml
中查看。
adb uninstall android.camera.cts
1.4 使用am instrument
測試
執(zhí)行am instrument
會運行整個測試軟件包序芦。要運行測試軟件包中的所有測試類臭杰,請輸入:
adb shell am instrument -w com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner
語法如下所示:
adb shell am instrument -w <test_package_name>/<runner_class>
am instrument
工具使用 -e
標記以鍵值對的形式將測試選項傳遞給 AndroidJUnitRunner
或 InstrumentationTestRunner
,語法如下:
-e <key> <value>
GitHub Copilot:
AndroidJUnitRunner
和InstrumentationTestRunner
都是Android測試框架中的測試運行器芝加,但它們之間有一些區(qū)別硅卢。InstrumentationTestRunner
是Android測試框架的早期版本中使用的測試運行器,它是一個基于Instrumentation
的測試運行器藏杖,可以運行在Android設(shè)備或模擬器上将塑。它可以運行JUnit3
和JUnit4
測試,并提供了一些額外的功能蝌麸,如測試套件的支持点寥、測試超時、測試結(jié)果的輸出等来吩。AndroidJUnitRunner
是Android測試框架的更新版本中使用的測試運行器敢辩,它是一個基于JUnit4
的測試運行器,可以運行在Android設(shè)備或模擬器上弟疆。它提供了與JUnit4
相同的功能戚长,并支持JUnit4
的注釋和規(guī)則。此外怠苔,它還提供了一些額外的功能同廉,如多進程測試、測試過濾、測試超時迫肖、測試結(jié)果的輸出等锅劝。因此,AndroidJUnitRunner
是更先進和更強大的測試運行器蟆湖,建議在新的Android測試項目中使用它故爵。
因此可以使用如下命令測試某個方法。
adb shell am instrument -e class android.hardware.camera2.cts.ZoomCaptureTest#testRawZoomCapture -w android.camera.cts/androidx.test.runner.AndroidJUnitRunner
執(zhí)行完這條命令后隅津,該函數(shù)會被執(zhí)行诬垂,可以看到添加的log被執(zhí)行。
1.5 優(yōu)缺點
優(yōu)點:無需執(zhí)行 ./cts-tradefed 就能執(zhí)行JUnit單元測試伦仍,編譯速度快剥纷。
缺點:功能相對有限,不支持批量測試或高度定制化的測試場景呢铆。
2. atset
2.1 配置環(huán)境
source build/envsetup.sh
lunch aosp_arm64
cd cts/tests/camera
2.2 構(gòu)建測試模塊
執(zhí)行m CtsCameraTestCases
構(gòu)建CtsCameraTestCases
模塊:
m CtsCameraTestCases
2.3 測試
2.3.1 測試整個模塊
atest CtsCameraTestCases
執(zhí)行 atest CtsCameraTestCases
會自動測試整個模塊晦鞋。
2.3.2 測試特定方法
官方文檔中例子如下(更多請參考官方文檔):
atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval
也就是說,這里可以執(zhí)行 atest className#methodName
棺克。
執(zhí)行命令:
atest android.hardware.camera2.cts.ZoomCaptureTest#testRawZoomCapture
log出現(xiàn)悠垛,表示函數(shù)被執(zhí)行。
2.4 優(yōu)缺點
優(yōu)點:這種方式娜谊,不用手動安裝apk 确买。
缺點:需找到對應(yīng)模塊,第一次構(gòu)建模塊纱皆,耗時較長湾趾。
3. 源碼導(dǎo)入 android studio后,直接debug
3.1 導(dǎo)入Android Studio
可參考這些:
CTS自帶測試用例(buletooth)導(dǎo)入Android Studio圖文教程
Android Studio導(dǎo)入CTS測試用例并測試
(2)-cts調(diào)試環(huán)境的搭建
3.2 優(yōu)缺點
優(yōu)點:可直接run派草,走gradle編譯搀缠。
缺點:需配置gradle,導(dǎo)入framework等jar近迁。配置較為復(fù)雜艺普。可能適用于錯誤較多鉴竭,長期debug的project歧譬。
最后來個AI總結(jié)版。
cts-tradefed搏存、am instrument 和 atest 這3種執(zhí)行JUnit測試的方法有什么優(yōu)缺點瑰步?
Poe中GPT4的回答:
這三種執(zhí)行JUnit測試的方法分別是CTS-TradeFed、am instrument
和 atest
璧眠,它們在Android測試框架中都有應(yīng)用缩焦。下面我們來分別看一下它們的優(yōu)缺點:
-
CTS-TradeFed
(Compatibility Test Suite - Trade Federation)- 優(yōu)點:
- 專為Android兼容性測試而設(shè)計兵钮,確保設(shè)備及應(yīng)用滿足Android兼容性定義文檔 (CDD) 的要求。
- 支持批量測試和自動化測試舌界。
- 提供靈活的測試定制和運行選項。
- 可以在設(shè)備測試時生成詳細的測試報告泰演。
- 缺點:
- 相對復(fù)雜呻拌,可能需要更多的時間來學(xué)習(xí)和配置。
- 對于非兼容性測試場景睦焕,可能不是最佳選擇藐握。
- 優(yōu)點:
-
am instrument
(Activity Manager Instrument)- 優(yōu)點:
- 作為Android系統(tǒng)的一部分,可以直接在設(shè)備上運行垃喊。
- 使用簡單猾普,命令行即可執(zhí)行。
- 適用于簡單的測試場景本谜。
- 缺點:
- 功能相對有限初家,不支持批量測試或高度定制化的測試場景。
- 測試報告可能不如CTS-TradeFed詳盡乌助。
- 優(yōu)點:
-
atest
(Android Test Framework)- 優(yōu)點:
- 適用于單元測試溜在、集成測試和端到端測試。
- 提供了一個統(tǒng)一的測試入口他托,可以將多個測試工具整合在一起掖肋。
- 支持Gradle構(gòu)建系統(tǒng),方便與Android Studio集成赏参。
- 支持測試分片志笼、并行執(zhí)行和結(jié)果報告。
- 缺點:
- 相較于
am instrument
把篓,使用起來相對復(fù)雜纫溃,需要配置環(huán)境變量。 - 對于非Android開發(fā)者韧掩,學(xué)習(xí)成本可能較高皇耗。
- 相較于
- 優(yōu)點:
總結(jié):在選擇執(zhí)行JUnit測試的方法時,應(yīng)根據(jù)測試場景和需求進行選擇揍很。CTS-TradeFed更適合兼容性測試郎楼,am instrument
適用于簡單的測試場景,而atest
則提供了豐富的功能和靈活性窒悔,適用于多種測試場景呜袁。
一點碎碎念:簡書現(xiàn)在很難傳圖,傳圖很卡简珠,所以圖片都刪去了阶界。
參考鏈接:
CTS本地手動測試方法_camera cts 如何添加log
Android Studio導(dǎo)入CTS測試用例并測試
使用 adb 運行測試
插樁測試
運行測試 (Atest)
使用am instrument驗證CTS問題
Google atest的使用
使用Instrumentation命令測試cts apk