Android相容性測試CTS --環境搭建、測試執行、結果分析
圖1 Android 官網中CTS測試環境下載等
大部分是基於Junit和儀表盤技術編寫的。還擴充套件了自動化測試過程,可以自動執行用例,自動收集和彙總測試結果。CTS採用XML配置檔案的方式將這些測試用例分組成多個測試計劃(plan),第三方也可以建立自己的plan。
CTS測試執之前要做的準備工作如下:
1. 下載相容性測試用例包,並解壓,解壓後的檔名命名為“android-cts”。在http://source.android.com/compatibility/downloads.html頁面的最下方,有一個名為“Compitibility Test Suite(CTS) User Manual”的連結,是最新版本的Android相容性測試用例的執行方法,建議在執行之前先通讀該文件。
2. 刷機為需要測試的版本。
3. 手機開機時,如果有google賬戶設定,取消即可:Start->Not now->Next->Next->Next->Finish。
4. 設定手機語言為英語:Setting->Language&input->language->English(United States)。
5. 插入SIM卡和外接SD卡(SD卡需要格式化:Settings->Storage->Erase SD card->Erase SD card->Erase Everything)。
6. 插入USB,連線手機到電腦,可以用adb devices檢查,是否正確連線。
7. 開啟wifi, 並連線到可用wifi。
8. 開啟藍芽,無須配對。
9. 保證手機無操作30分鐘後LCD off:Settings->Display->Sleep->30 minutes.
10. 去掉螢幕鎖:Settings->Security->Screen Lock 的值是“None”.
11. 開啟Settings->Location services->“Google location services”, ”GPS satellites”, ”Location & Google search”.
12. 開啟Settings->Accessibility->Developer options->USB debugging(USB 除錯).
13. 開啟Settings->Accessibility->Developer options->Stay Awake(保持喚醒).
14. 開啟Settings->Accessibility->Developer options->Allow mock location(允許模擬位置).
15. 通過Settings->Speech synthesis->Install voice data安裝“Text To Speech”檔案(com.svox.langpack.installer-1.apk), 假如android-cts/repository/testcases/中沒有此檔案,就省去這一步。
16. 如果需要執行可訪問性方面的相容性測試,則安裝“CtsDelegatingAccessibilityService.apk”(adb install –r */android-cts/repository/testcases/ CtsDelegatingAccessibilityService.apk),並將Settings->Accessibility->Delegating Accessibility Service選項開啟。假如m目錄中沒有此檔案,就省去這一步,一般情況下是沒有的。
17. 如果需要執行裝置管理方面的相容性測試,則安裝“CtsDeviceAdmin.apk” (adb install –r */android-cts/repository/testcases/ CtsDeviceAdmin.apk),並將Setting->Security->Devices Administrators->android.devicesadmin.cts.CtsDevicesAdmin等選項開啟。目錄中一定會有這個檔案的,請仔細查詢,如圖2所示。
圖2 CtsDeviceAdmin.apk
18. 如果需要執行多媒體方面的相容性測試,則需要執行:
2)進入解壓後的資料夾,並執行bash copy_media.sh, 把測試所需檔案copy到手機記憶體中,假如copy失敗,可能是手機路徑不對,請用gedit開啟copy_media.sh檔案,同時adb shell進入手機終端,檢視手機記憶體目錄與copy_media.sh檔案中的目錄是否一致。如果不一致,請更改copy_media.sh檔案,必須保證copy到手機記憶體(copy完之後可以開啟gallery進行檢視),否則會影響後邊android.media等與media相關測試包的執行,如圖3-1、圖3-2所示。
圖3-1 Copy Media
圖3-2 Copy Media
19. 保證手機處於home介面,即按下“Home”鍵。
CTS測試正式開始:
1. 進入到“*/android-cts/tools”目錄,執行bash cts-tradefed,先識別裝置,之後出現cts_host >,則證明已進入CTS命令列互動介面,此時可以輸入cts相關命令來執行cts測試了,如圖4所示。
圖4 CTS命令列互動介面
2. 測試預設CTS,其中包括所有的packages,可以輸入如下命令 :
run cts --plan CTS(這兩次跑測試都用的這個,具體用哪個,請諮詢相關人員)
或者 run cts –disable -reboot --plan CTS (跑測試過程中,手機不會reboot,這樣可以方便接adb logcat),跑起來時先根據日期和時間建立測試結果的資料夾,然後出現“start test run of xx packages, containing xx tests”說明測試已經開始跑了,此時儘量再多觀察十分鐘,出現“Installing prerequisites”並且之後有顯示case pass,則確保cts確實開始run了,如圖5所示。
圖5 run cts
CTS測試結果分析:
測試結束後在*/android-cts/respository/results資料夾中,會看到以日期和時間命名的資料夾用於儲存執行過的測試結果,如圖6-1、圖6-2所示。
圖6-1 results
圖6-2 results
而且還有一個同名的zip檔案儲存同樣的內容。測試過程中的自動錄log,測試結束後log自動儲存在*/android-cts/respository/logs裡邊以日期和時間命名的資料夾中,如圖7-1、圖7-2所示。
圖7-1 logs
圖7-2 logs
在測試結果資料夾中,所有的測試結果是以XML的形式儲存的。通常測試結果網頁分成“Device Information”、“Test Summary”、“Test Summary by Package”、“Test Failures(xx)”和“Detailed Test Report”等四個區域。其中 “Device Information”中列出了被測裝置具體的軟硬體以及功能配置資訊,如圖8所示。
圖8 Device Information
“Test Summary”列出了CTS 版本號,各狀態case個數等資訊,如圖9所示。
圖9 Test Summary
而“Test Failures(xx)”會將斷言失敗時的輸出記錄在內,如圖10所示。
圖10 Test Failures
每次測試保證把CTS測試case全部跑完,用 “l r”檢視,本次CTS測試是否全部run完,即not executed一列的數值是0,如果數值不為0,則表示還剩下沒有run完的case,有可能是手機凍結或者reset導致adb 識別不了裝置,所以後邊的case都為not executed狀態,如圖11-1、圖11-2所示。
圖11-1 Not executed
圖11-2 Devices offline
這時需要重新連線手機,後使用命令“run cts --continue-session session_id” 就可以繼續上面not executed的case了,session_id用命令l r就可以看見,如圖12-1、圖12-2所示。
圖12-1 檢視Session ID
圖12-2 Continue not executed case
首先保證把整個case都run一遍,not executed數值為0。之後把“失敗的測試用例”中的case run 三遍,排除手機系統穩定性尤其是手機reset和freeze導致的case fail。目標是確定case fail是由於CTS case本身的問題,而不是任何別的因素。重新run fail的case時需要在上次全部run完的case上邊新建測試計劃,然後執行新建的測試計劃。新建測試測試使用命令“add derivedplan --plan plan_name -s sessionID -r [pass/fail/notExecuted]” 新增一個新的plan,再用命令“run cts --plan plan_name”執行即可測試沒測的項。如:
測試SessionID為2的所有fail項,輸入命令應為:
>add derivedplan --plan cts_fail_1 -s 2 -r fail
>run cts --plan cts_fail_1 // cts_fail_1即前面定義的,可以自己隨意起名字。
之後如果fail的還是很多,建議做第三遍,就在cts_fail_1測試計劃的基礎上,再次新建和執行測試計劃,假如用“l r”檢視cts_fail_1測試計劃的sessionID為3,則執行
>add derivedplan --plan cts_fail_2 -s 3 -r fail
>run cts --plan cts_fail_3
如圖13所示。
圖13 Add derivedplan
三次run完之後會在*/android-cts/respository/results資料夾中生成三個以日期和時間命名的結果資料夾,把三次都失敗的測試用例貼上到excel表中進行彙總,並統計每個測試包(package)中fail的case數量。
CTS測試部分常用命令,如圖14。
圖14 Help
與host相關的部分常用命令:
help: CTS命令一覽表
exit:退出cts終端
……
與run相關的部分常用命令:
run cts --plan test_plan_name: 執行一個測試計劃
run cts --package/-p: 單獨run cts測試中的一個包
run cts --class/-c [--method/-m]: run指定的類,或者具體到類中的方法
run cts --continue-session session_ID: 繼續run指定session上狀態為not executed 的case
run cts [option] --serial/-s device_ID: 在指定device_ID上run cts [option]
……
與java包相關的部分常用命令:
l/list d/devices: 列出所有連線的裝置和裝置的狀態
l/list packages: 列出CTS所有的測試包
l/list p/plan: 列出CTS所有的測試計劃
……
與測試計劃相關的部分常用命令:
add derivedplan --plan plan_name --session/-s session_id –r [pass/fail/notExecuted/timeout]:從指定session id中根據case的各種狀態產生一個新的測試計劃
……
與option相關的命令:
run cts --disable-reboot [option]: 在測試過程中不需要重啟手機
CTS常見問題總結
1.如果測試結果顯示android.media和android.mediastress兩個packages中fail的case較多,而且檢視details時,出現如圖14所示的log,則是media沒有copy進指定目錄,此時也可以adb shell進去手機終端,在fail log路徑下檢視,是否有所需檔案,我猜測一定是沒有的。
圖14 media fail log
之後需要重新將指定檔案copy到fail log中指定的目錄,此時可以參考*/android-cts-media-1.1/ copy_media.sh檔案中的各個push檔案路徑,如圖15所示,尤其注意其中的internal_sd,這是是會根據手機版本有可能會變化的,如果變化,請根據變化更新指令碼。
圖15 copy_media.sh
2.整輪測試跑完,如果需要rerun fail的case,在新增新的測試計劃時出現如圖16所示的狀態。
圖16 已有同名plan
根據提示也能看出是已有相同名字的plan存在,此時可以換個name,或者去如圖17所示目錄中把相同名字的plan刪除。
圖17 plan資料夾
3.如果測試過程中需要跑指定的幾個packages,而不是full CTS, 則可修改plan資料夾中的CTS.xml檔案,如圖18所示。
圖18 修改plan
CTS測試執行流程也可以參考以下部落格:
想要了解更深層次的CTS,可以參考以下部落格: