1. 程式人生 > >Android相容性測試CTS --環境搭建、測試執行、結果分析

Android相容性測試CTS --環境搭建、測試執行、結果分析

 為了確保Android應用能夠在所有相容Android的裝置上正確執行,並且保持相似的使用者體驗,在每個版本釋出之時,Android提供了一套相容性測試用例集合(Compatibility Test Suite, CTS)來認證執行Android系統的裝置是否完全相容Android規範,並附帶有相關的相容性標準文件(Compatibility Definition Document, CDD)。

         clip_image002_thumb[2]

圖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所示。

clip_image004_thumb[1]

圖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所示。

clip_image006_thumb[1]

圖3-1 Copy Media

clip_image008_thumb[1]

圖3-2 Copy Media

19. 保證手機處於home介面,即按下“Home”鍵。

CTS測試正式開始:

1. 進入到“*/android-cts/tools”目錄,執行bash cts-tradefed,先識別裝置,之後出現cts_host >,則證明已進入CTS命令列互動介面,此時可以輸入cts相關命令來執行cts測試了,如圖4所示。

clip_image010_thumb[1]

圖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所示。

clip_image012_thumb[1]

圖5 run cts

CTS測試結果分析:

測試結束後在*/android-cts/respository/results資料夾中,會看到以日期和時間命名的資料夾用於儲存執行過的測試結果,如圖6-1、圖6-2所示。

clip_image014_thumb[1]

圖6-1 results

clip_image016_thumb[1]

圖6-2 results

而且還有一個同名的zip檔案儲存同樣的內容。測試過程中的自動錄log,測試結束後log自動儲存在*/android-cts/respository/logs裡邊以日期和時間命名的資料夾中,如圖7-1、圖7-2所示。

clip_image018_thumb[1]

圖7-1 logs

clip_image020_thumb[1]

圖7-2 logs

在測試結果資料夾中,所有的測試結果是以XML的形式儲存的。通常測試結果網頁分成“Device Information”、“Test Summary”、“Test Summary by Package”、“Test Failures(xx)”和“Detailed Test Report”等四個區域。其中 “Device Information”中列出了被測裝置具體的軟硬體以及功能配置資訊,如圖8所示。

clip_image022_thumb[1]

圖8 Device Information

“Test Summary”列出了CTS 版本號,各狀態case個數等資訊,如圖9所示。

clip_image024_thumb[1]

圖9 Test Summary

而“Test Failures(xx)”會將斷言失敗時的輸出記錄在內,如圖10所示。

clip_image026_thumb[1]

圖10 Test Failures

每次測試保證把CTS測試case全部跑完,用 “l r”檢視,本次CTS測試是否全部run完,即not executed一列的數值是0,如果數值不為0,則表示還剩下沒有run完的case,有可能是手機凍結或者reset導致adb 識別不了裝置,所以後邊的case都為not executed狀態,如圖11-1、圖11-2所示。

clip_image028_thumb[1]

圖11-1 Not executed

clip_image030_thumb[1]

圖11-2 Devices offline

這時需要重新連線手機,後使用命令“run cts --continue-session session_id” 就可以繼續上面not executed的case了,session_id用命令l r就可以看見,如圖12-1、圖12-2所示。

clip_image032_thumb[1]

圖12-1 檢視Session ID

clip_image034_thumb[1]

圖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所示。

clip_image036_thumb[1]

圖13 Add derivedplan

三次run完之後會在*/android-cts/respository/results資料夾中生成三個以日期和時間命名的結果資料夾,把三次都失敗的測試用例貼上到excel表中進行彙總,並統計每個測試包(package)中fail的case數量。

CTS測試部分常用命令,如圖14。

clip_image038_thumb[3]

圖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路徑下檢視,是否有所需檔案,我猜測一定是沒有的。

clip_image040_thumb[1]

圖14 media fail log

之後需要重新將指定檔案copy到fail log中指定的目錄,此時可以參考*/android-cts-media-1.1/ copy_media.sh檔案中的各個push檔案路徑,如圖15所示,尤其注意其中的internal_sd,這是是會根據手機版本有可能會變化的,如果變化,請根據變化更新指令碼。

clip_image042_thumb[2]

圖15 copy_media.sh

2.整輪測試跑完,如果需要rerun fail的case,在新增新的測試計劃時出現如圖16所示的狀態。

clip_image044_thumb[1]

圖16 已有同名plan

根據提示也能看出是已有相同名字的plan存在,此時可以換個name,或者去如圖17所示目錄中把相同名字的plan刪除。

clip_image046_thumb[1]

圖17 plan資料夾

3.如果測試過程中需要跑指定的幾個packages,而不是full CTS, 則可修改plan資料夾中的CTS.xml檔案,如圖18所示。

clip_image048_thumb[3]

圖18 修改plan

CTS測試執行流程也可以參考以下部落格:

想要了解更深層次的CTS,可以參考以下部落格: