一、简介

为了确保Android应用能够在所有兼容Android的设备上正确运行,并且保持相似的用户体验,在每个版本发布之时,Android提供了一套兼容性测试用例集合(Compatibility Test Suite, CTS)来认证运行Android系统的设备是否完全兼容Android规范,并附带有相关的兼容性标准文档(Compatibility Definition Document, CDD)。大部分是基于Junit和仪表盘技术编写的。还扩展了自动化测试过程,可以自动执行用例,自动收集和汇总测试结果。CTS采用XML配置文件的方式将这些测试用例分组成多个测试计划(plan),第三方也可以创建自己的plan

CTS是开源的测试框架,使用它来测试你的设备是否具备兼容性。CTS主要包含两个组件:
运行在PC上的测试框架组件。主要用来管理测试用例(test case)的执行。
运行在设备或模拟器上的测试用例。这些用例用Java写成的APK文件。

CTS的版本跟android是对应的,每个平台有部同的CTS版本
CTS7.0之前的版本为 :CTS V1
CTS7.0以及之后的版本为:CTS V2

运行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的开发环境就可以了。关于环境变量如何配置可以去找下相关的资料。

1. 下载兼容性测试用例包,并解压并命名为“android-cts”。

CTS国内的下地址:http://source.android.youdaxue.com/compatibility/cts/downloads。

windows选择Android4.4 R3 Compatibility Test Suite (CTS) - ARM下载

解压后的目录结构如下:

lottie兼容性处理android android 兼容性测试_测试计划

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,会出现如下界面:

lottie兼容性处理android android 兼容性测试_android_02

运行一个测试试试:

lottie兼容性处理android android 兼容性测试_android_03

现在你回头去看之前的respository目录的logs和results目录里会多了一个文件:

lottie兼容性处理android android 兼容性测试_android_04

等收集完手机信息后会启动测试,如下图:

lottie兼容性处理android android 兼容性测试_测试计划_05

结束后去repository/results/下查看结果,点击testResult.xml文件,会在浏览器里打开统计数据

 

 

二、常用命令

与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]: 在测试过程中不需要重启手机

 

 

三、测试流程

----------------------------------------------

第一部分:准备工作

----------------------------------------------

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(设置-》安全-》设备管理器中生成下图,把这三项选中)

lottie兼容性处理android android 兼容性测试_移动开发_06

 

 

----------------------------------------------

第二部分:开始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

lottie兼容性处理android android 兼容性测试_移动开发_07

按上方的例子:android.acceleration.cts.HardwareAccelerationTest是package name,testIsHardwareAccelerated是method name

7.输入runcts -c android.acceleration.cts.HardwareAccelerationTest --m testIsHardwareAccelerated开始测试这个Case

8. 测试完成后,CTS会自动生成一个新测试报告文件夹

 

四、注意点

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文件。

lottie兼容性处理android android 兼容性测试_lottie兼容性处理android_08