1、簡介html
爲了確保Android應用可以在全部兼容Android的設備上正確運行,而且保持類似的用戶體驗,在每一個版本發佈之時,Android提供了一套兼容性測試用例集合(Compatibility Test Suite, CTS)來認證運行Android系統的設備是否徹底兼容Android規範。CTS(全稱「Compatibility Test Suite」,即「兼容性測試包」)的認證,這是一組用以測試的.apk程序之類的集合,它可以在官網(http://source.android.com/compatibility/downloads.html)上面免費下載,而且測試也很是簡單——只是結果很是苛刻。CTS的目的就是讓Android設備(如:手機)開發商可以開發出兼容性更好的Android設備java
CTS採用XML配置文件的方式將這些測試用例分組成多個測試計劃(plan),第三方也能夠建立本身的planlinux
CTS是開源的測試框架,使用它來測試你的設備是否具有兼容性。CTS主要包含兩個組件:
運行在PC上的測試框架組件。主要用來管理測試用例(test case)的執行。
運行在設備或模擬器上的測試用例。這些用例用Java寫成的APK文件。android
CTS的版本跟android是對應的,每一個平臺有部同的CTS版本
CTS7.0以前的版本爲 :CTS V1
CTS7.0以及以後的版本爲:CTS V2
shell
運行CTS會把相應的測試用例(也就是一個APK文件)傳送到設備上並經過instrumentation運行,而後記錄運行結果,最後刪除測試用例。全部的測試用例執行完畢後,能夠參照測試結果從新調整或優化系統。而後繼續運行CTS測試。CTS的測試包能夠到:http://source.android.com/compatibility/downloads.html去下載,選擇對應Android版本的CDD文檔(介紹CTS測試),CTS測試包下載(測試包會不斷更新),如:android-cts-verifier-4.0.3_r1-linux_x86-arm.zip,android-cts-media-1.0.zip;將下載的CTS測試包解壓到相應文件夾裏面應包含:android-cts文件夾裏面包含Docs、Repository、Tools三個文件夾。須要配置好SDK相關的環境變量,最好是在Ubuntu下進行,搭建好Android的開發環境就能夠了。關於環境變量如何配置能夠去找下相關的資料。windows
1. 下載兼容性測試用例包,並解壓並命名爲「android-cts」。瀏覽器
CTS國內的下地址:http://source.android.youdaxue.com/compatibility/cts/downloads。安全
windows選擇Android4.4 R3 Compatibility Test Suite (CTS) - ARM下載bash
解壓後的目錄結構以下:session
repository目錄後,會有四個文件
logs:存放case執行過程當中的log文件或者截圖
plans:配置plan的xml文件存放處,自帶如下plan
results:結果文件
testcases:case存放目錄,自帶以下case
tools 工具的執行目錄,包含了所需的jar包和一個linux下可執行的shell文件。
工具想要在windows下執行,須要在tools下添加一個windows下可執行的文件:cts-tradefed.bat
@echo off
setlocal enabledelayedexpansion
setlocal ENABLEEXTENSIONS
::設置cts根目錄,更改當前目錄爲批處理自己的目錄
set CTS_ROOT=%~dp0\..\..
::設置支持的jar包的根目錄
set JAR_DIR=%CTS_ROOT%\android-cts\tools
::支持的jar包,一下項目中引用的jar包都要在啓動的時候包含進來
set JARS=ddmlib-prebuilt.jar tradefed-prebuilt.jar hosttestlib.jar cts-tradefed.jar tradefed-prebuilt-orgin.jar jsoup-1.7.3.jar gson-2.2.4.jar commons-compress-1.8.1.jar mail.jar javacsv.jar RXTXcomm.jar
set JAR_PATH=.
for %%i in (%JARS%) do (
set JAR_PATH=!JAR_PATH!;%%i
)
java %RDBG_FLAG% -cp %JAR_PATH% -DCTS_ROOT=%CTS_ROOT% com.android.cts.tradefed.command.CtsConsole %*
pause
插上手機,點擊cts-tradefed.bat文件啓動cts,會出現以下界面:
運行一個測試試試:
如今你回頭去看以前的respository目錄的logs和results目錄裏會多了一個文件:
等收集完手機信息後會啓動測試,以下圖:
結束後去repository/results/下查看結果,點擊testResult.xml文件,會在瀏覽器裏打開統計數據
2、經常使用命令
與host相關的部分經常使用命令:
help: CTS命令一覽表
exit:退出cts終端
與run相關的部分經常使用命令:
cts-tf>run cts --plan <test_plan_name> 執行一個測試計劃
cts-tf>run cts --package <package_name> 單獨運行cts測試中的一個包
cts-tf>run cts -c <package name> -m <testcase_name> 單獨測試某個用例
cts-tf>run cts --continue-session <session_ID> 繼續運行指定session上狀態爲not executed 的case
cts-tf>run cts [option] --serial/-s <device_ID> 在指定device_ID上run cts [option]
與java包相關的部分經常使用命令:
cts-tf>list devices: 列出全部鏈接的設備和設備的狀態
cts-tf>list packages: 列出CTS全部的測試包
cts-tf>list plan: 列出CTS全部的測試計劃
與測試計劃相關的部分經常使用命令:
cts-tf>add derivedplan --plan plan_name --session/-s session_id –r [pass/fail/notExecuted/timeout]:從指定session id中根據case的各類狀態產生一個新的測試計劃
與option相關的命令:
cts-tf>run cts --disable-reboot [option]: 在測試過程當中不須要重啓手機
3、測試流程
----------------------------------------------
第一部分:準備工做
----------------------------------------------
1.在手機上安裝android-cts/repository/testcases目錄下的兩個APK:CtsDelegatingAccessibilityService.apk,CtsDeviceAdmin.apk
2. 進入settings打開Wi-Fi並鏈接AP (AP須要連外網)
3.進入settings->Security->Screenlock設爲None
4.進入settings->Security->EnableUnknown sources
5.進入settings->Security->Deviceadministrators->Enable兩個選項
6.進入Language&input->language設爲English(UnitedStates)
7.進入settings->Display->Sleep設爲30minutes或None
8.進入settings->Developeroptions->Enable USB debugging、Stay awake、Allowmock locations
9.進入settings->Accessibility->EnableDelegating Accessibility Service(設置-》安全-》設備管理器中生成下圖,把這三項選中)
----------------------------------------------
第二部分:開始CTS測試(每次輸入後加回車)
----------------------------------------------
1.平臺用USB線鏈接電腦
2.打開終端切換到root用戶,cd到tools目錄下, 輸入 ./cts-tradefed (linux平臺)
2.點擊cts-tradefed.bat文件啓動cts (Windows平臺)
3.輸入run cts --plan CTS顯示以下,則代表開始測試CTS
cts-tf > run cts --plan CTS
cts-tf> 01-16 15:45:34 I/TestInvocation: Starting invocation for 'cts' on build'4.0.3_r1' on device 0123456789ABCDEF
01-16 15:45:35I/0123456789ABCDEF: Created result dir 2012.01.16_15.45.34
不一樣版本測試計劃基本同樣,可分七種
CTS:運行全部的兼容性測試用例,目前暫時不包括性能測試用例
Signature:對簽名的全部的公共接口進行驗證
Android:對Android的接口進行測試
Java:對Java核心庫進行測試
VM:對Dalvik虛擬機進行測試
RefAPP:對參考應用進行測試
Performance:對性能進行測試
----------------------------------------------
第三部分:關於CTS4.0測試報告
----------------------------------------------
1.CTS測試報告是自動生成一個xml報表,並自動填寫的,不須要測試人員干預
2.當一個CTS測試任務開始時,會在/repository/results中爲這個任務創建一個存放測試報告的文件夾,文件名以任務開始的日期和時間命名。
3.CTS4.0生成測試報告的速度比CTS2.3/2.2要慢很多,特別是在測試過程當中中斷測試,CTS4.0須要70秒纔會開始生成報告。若是你在此過程當中按ctrl+c終止CTS進程,測試報告就沒法生成,之後也沒法繼續測試未完成的計劃。
4.CTS測試任務完成後,會生成testResult.xml和2012.01.12.zip打開這個文件夾中的testResult.xml(用firefox或IE瀏覽器打開),查看報表是否徹底。
----------------------------------------------
第四部分:繼續測試未完成的計劃
----------------------------------------------
CTS4.0對未完成的測試計劃不會生成xml報告,這個和CTS2.3/2.2不一樣。可是,這並不意味測試中斷後沒法繼續未完成的測試。
1. 前提條件是有未完成的測試計劃
2. 平臺用USB線鏈接電腦
3. 進入的CTS狀態(cts-tf >)
6.輸入l r終端會顯示(l和r中間有空格)
Session Pass Fail Not Executed Start time Planname
0 7 0 0 2012.01.16_16.09.19 NA
1 13 0 0 2012.01.16_16.13.01 NA
2 19 19 17120 2012.01.18_13.43.56 CTS
(根據start time時間,肯定你要的任務的session編號)
7. 輸入 run cts –continue-session session_id (session編號)
----------------------------------------------
第五部分:單獨對fail/notExecuted/timeout的測試項進行測試
----------------------------------------------
1.前提條件是已經有完成的測試結果testResult.xml文件
2.平臺用USB線鏈接電腦
3. 進入的CTS狀態(cts-tf >)
4.輸入l r
Session Pass Fail Not Executed Start time Plan name
0 7 0 0 2012.01.16_16.09.19 NA
1 13 0 0 2012.01.16_16.13.01 NA
5.輸入addderivedplan --plan plane_name(新建一個測試計劃) --session/-s session_id -r[pass/fail/notExecuted/timeout] (只能選擇其中一項)
6.輸入run cts –plan plane_name(新建的測試計劃名稱) 開始測試
7.測試完成後,CTS會自動生成一個新測試報表文件夾
----------------------------------------------
第六:單獨測試某個Case
----------------------------------------------
1.單個Case每單獨測試一次,就會生成一個Session(和測試報告xml)。
2.平臺用USB線鏈接電腦
3. 進入的CTS狀態(cts-tf >)
6.從CTS測試報告XML文件中查找須要測試的Case的packagename 和 method name
按上方的例子:android.acceleration.cts.HardwareAccelerationTest是package name,testIsHardwareAccelerated是method name
7.輸入runcts -c android.acceleration.cts.HardwareAccelerationTest --m testIsHardwareAccelerated開始測試這個Case
8. 測試完成後,CTS會自動生成一個新測試報告文件夾
4、注意點
1. 若是須要執行可訪問性方面的兼容性測試,則安裝「CtsDelegatingAccessibilityService.apk」,並將Settings->Accessibility->Delegating Accessibility Service選項打開。通常狀況下是沒有的。
2. 若是須要執行設備管理方面的兼容性測試,則安裝「CtsDeviceAdmin.apk」,並將Setting->Security->Devices Administrators->android.devicesadmin.cts.CtsDevicesAdmin等選項打開。
3. 若是須要執行多媒體方面的兼容性測試,則須要:
1)從http://source.android.com/compatibility/downloads.html 下載android- cts-media-X.Y.zip並解壓。
2)進入解壓後的文件夾,並執行bash copy_media.sh, 把測試所需文件copy到手機中,不然會影響後邊android.media等與media相關測試包的執行。
4. 保證手機處於home界面,即按下「Home」鍵。CTS測試正式開始以後出現「cts_host >」測試默認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.CTS每次執行run cts –plan CTS時,CTS會搜索android-cts-4.0.3_r#-linux_x86-arm/android-cts/repository/results中的歷史報表文件夾。若是文件有不少,啓動速度會很是慢。因此,請按期清理results文件夾中的歷史報表(直接刪除報表文件夾便可)
6.每次測試保證把CTS測試case所有跑完,用 「l r」查看,本次CTS測試是否所有run完,即not executed一列的數值是0,若是數值不爲0,則表示還剩下沒有run完的case,有多是手機凍結或者reset致使adb 識別不了設備,因此後邊的case都爲not executed狀態。若是手機離線了,即adb devices 狀態爲offline,這時須要從新鏈接手機,後使用命令「run cts --continue-session session_id」 就能夠繼續上面not executed的case了,session_id用命令l r就能夠看見。
7.若是測試過程當中須要跑指定的幾個packages,而不是full CTS, 則可修改plan文件夾中的CTS.xml文件。