CTS調(diào)試模塊

在調(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 標記以鍵值對的形式將測試選項傳遞給 AndroidJUnitRunnerInstrumentationTestRunner,語法如下:

-e <key> <value>

GitHub Copilot: AndroidJUnitRunnerInstrumentationTestRunner都是Android測試框架中的測試運行器芝加,但它們之間有一些區(qū)別硅卢。InstrumentationTestRunner是Android測試框架的早期版本中使用的測試運行器,它是一個基于Instrumentation的測試運行器藏杖,可以運行在Android設(shè)備或模擬器上将塑。它可以運行JUnit3JUnit4測試,并提供了一些額外的功能蝌麸,如測試套件的支持点寥、測試超時、測試結(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 instrumentatest璧眠,它們在Android測試框架中都有應(yīng)用缩焦。下面我們來分別看一下它們的優(yōu)缺點:

  1. CTS-TradeFed (Compatibility Test Suite - Trade Federation)
    • 優(yōu)點:
      • 專為Android兼容性測試而設(shè)計兵钮,確保設(shè)備及應(yīng)用滿足Android兼容性定義文檔 (CDD) 的要求。
      • 支持批量測試和自動化測試舌界。
      • 提供靈活的測試定制和運行選項。
      • 可以在設(shè)備測試時生成詳細的測試報告泰演。
    • 缺點:
      • 相對復(fù)雜呻拌,可能需要更多的時間來學(xué)習(xí)和配置。
      • 對于非兼容性測試場景睦焕,可能不是最佳選擇藐握。
  2. am instrument (Activity Manager Instrument)
    • 優(yōu)點:
      • 作為Android系統(tǒng)的一部分,可以直接在設(shè)備上運行垃喊。
      • 使用簡單猾普,命令行即可執(zhí)行。
      • 適用于簡單的測試場景本谜。
    • 缺點:
      • 功能相對有限初家,不支持批量測試或高度定制化的測試場景。
      • 測試報告可能不如CTS-TradeFed詳盡乌助。
  3. 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í)成本可能較高皇耗。

總結(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末虹钮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子膘融,更是在濱河造成了極大的恐慌芙粱,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氧映,死亡現(xiàn)場離奇詭異春畔,居然都是意外死亡,警方通過查閱死者的電腦和手機岛都,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門律姨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人臼疫,你說我怎么就攤上這事择份。” “怎么了烫堤?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵荣赶,是天一觀的道長。 經(jīng)常有香客問我鸽斟,道長讯壶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任湾盗,我火速辦了婚禮伏蚊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘格粪。我一直安慰自己躏吊,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布帐萎。 她就那樣靜靜地躺著比伏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疆导。 梳的紋絲不亂的頭發(fā)上赁项,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音澈段,去河邊找鬼悠菜。 笑死,一個胖子當著我的面吹牛败富,可吹牛的內(nèi)容都是我干的悔醋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼兽叮,長吁一口氣:“原來是場噩夢啊……” “哼芬骄!你這毒婦竟也來了猾愿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤账阻,失蹤者是張志新(化名)和其女友劉穎蒂秘,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淘太,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡姻僧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了琴儿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡嘁捷,死狀恐怖造成,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雄嚣,我是刑警寧澤晒屎,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站缓升,受9級特大地震影響鼓鲁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜港谊,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一骇吭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧歧寺,春花似錦燥狰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至顷链,卻和暖如春目代,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嗤练。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工榛了, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人煞抬。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓忽冻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親此疹。 傳聞我的和親對象是個殘疾皇子僧诚,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容