搜档网
当前位置:搜档网 › CTS深入分析

CTS深入分析

CTS深入分析
CTS深入分析

CTS Study

1. CTS简介

CTS 全称Compatibility Test Suite兼容性测试工具。当电子产品开发出来,并定制了自己的Android系统后,必须要通过最新的CTS检测,以保证标准的android application能运行在该平台下。通过了CTS验证,需要将测试报告提交给Google,已取得android market的认证。

CTS是一款通过命令行操作的工具。目前cts没有提供windows版本,只能在Linux下测试。在我们实际使用CTS的过程中,很可能需要根据特定的要求,来定制自己的Test Plan。这时就需要自己编译CTS,因此,本文主要向大家介绍如何编译CTS,及使用编译出的CTS 工具。至于从android官网上取得的CTS,其使用方式与我们自己编译的工具类似,本文只做简单介绍。

2.获取CTS工具

假定Developer之前已经搭建好,linux环境。以下操作均在linux下进行。由于google的原因,Android 2.3 Gingerbread中的CTS是不完整的,所以我们选择Android2.2 Froyo的CTS 作为本文的研究对象。以下附上Google的回复:

Theoretically, CTS for Gingerbread should be built the same way as for Froyo.

However (and this is important), please note that the CTS version

that's currently in the gingerbread branch is incomplete. We're

working on that, but the long holiday breaks have made progress slower

than usual.

https://www.sodocs.net/doc/d414426811.html,/group/android-building/browse_thread/thread/53de18db6af17513从回复中看,Gingerbread中CTS的编译过程和Froyo是一样的,命令使用方法是一样的。我猜测,有可能在Gingerbread中加入了一些新的测试,毕竟android对硬件的要求是越来越高了,从CDD可以看出。

2.1 下载编译源码获取CTS工具

2.1.1 下载

git下载的android源码里包含cts,位置在/cts目录下(android2.1以后版本)

如果没有也可以从此处下载git://https://www.sodocs.net/doc/d414426811.html,/platform/cts.git(源码70M左右)

2.1.2 64bit System步骤

我们一般配置的是32bit系统,没有对64bit system 操作CTS做详细研究,仅仅从网上摘抄CTS工具编译步骤。

●64 bit System

在Linux下进入android源码根目录,输入以下命令:

$ build/envsetup.sh

$ make cts

此时生成测试计划,测试包,测试用例,和测试报告生成的目录

2.1.3 32bit System步骤

●32 bit System

修改默认的Java环境:

sudo apt-get install sun-java6-jdk

sudo update-java-alternatives -s java-6-sun

修改以下文件:

◆\external\clearsilver\java-jni\Android.mk

◆\external\clearsilver\cgi\Android.mk

◆\external\clearsilver\cs\Android.mk

◆\external\clearsilver\util\Android.mk

将m64改为m32

◆\build\core\main.mk

将64 改为i686

◆/build/core/tasts/cts.mk

◆/out/host/linux/cts/android-cts/tools/startcts

◆/development/testrunner/test_defs/host_test.py

◆/cts/tools/utils/startcts

将DDMS_LIB = ddmlib.jar 改为DDMS_LIB= ddmlib-prebuilt.jar

或者编译完成后,在\out\host\linux-x86\framework目录下输入linux命令:

cp ddmlib-prebuilt.jar ddmlib.jar 这样比较方便。

方法比较多,只要保证让脚本找到所需的jar文件。

编译:

在Linux下进入android源码根目录,输入以下命令:

$ chmod 777 build/envsetup.sh

$ build/envsetup.sh

$ make cts

此时生成测试计划,测试包,测试用例,和测试报告生成的目录,

编译好cts后生成的文件位置如下:

#mydroid/out/host/linux-x86/

在该目录下包含如下测试文件

◆Package CTS : out/host/linux-x86/cts/android-cts.zip

◆cts make file : mydroid/build/core/tasks/cts.mk

◆run cts program : mydroid/out/host/linux-x86/bin/cts

◆test plans : mydroid/out/host/linux-x86/cts/android-cts/repository/plans

◆test packages : mydroid/out/host/linux-x86/cts/android-cts/repository/testcases ◆test results : mydroid/out/host/linux-x86/cts/android-cts/repository/results

◆CTS program settings value : mydroid/cts/tools/utils/host_config.xml

配置Framework环境变量:

export ANDROID_ROOT=/[MyAndroid]/out/host/linux-x86

2.2 下载gongle发布的CTS工具

点击Android 2.2 R4 Compatibility Test Suite (CTS) 下载CTS工具

现在Google最新发布的CTS工具是android 2.2 froyo本版的,以后可以针对需要下载对应的CTS版本。

3.使用

3.1 修改环境变量

3.1.1编译的CTS

CTS 和android SDK工具目录如下:

/out/host/linux-x86/bin

/android-sdk-linux_86/platform-tools

/android-sdk-linux_86/tools

将CTS工具路径和android SDK 工具路径加入环境变量,在linux下输入以下命令: env

查阅原有环境变量,其中环境变量PATH的值为:

PATH=/home/hanqigcxy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/g ames:/home/hanqigcxy/bin:

export

PATH=/home/hanqigcxy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/ usr/games:/home/hanqigcxy/bin:/home/hanqigcxy/android-source/out/host/linux-x86 /bin:/home/hanqigcxy/android-sdk-linux_86/platform-tools:/home/hanqigcxy/android -sdk-linux_86/tools

将CTS和android SDK工具目录加入到环境变量中,如上红色部分所示。注意要求输入完整路径,各路径以分号间隔。

3.1.2 Goole发布的CTS

如果使用的是Google发布的CTS工具路径为:

CTS 和android SDK工具目录如下:

/android-cts/tools

/android-sdk-linux_86/platform-tools

/android-sdk-linux_86/tools

将CTS工具路径和android SDK 工具路径加入环境变量,在linux下输入以下命令: env

查阅原有环境变量,其中环境变量PATH的值为:

PATH=/home/hanqigcxy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/g ames:/home/hanqigcxy/bin:

export

PATH=/home/hanqigcxy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/ usr/games:/home/hanqigcxy/bin:/home/hanqigcxy/android-cts/tools:/home/hanqigcxy /android-sdk-linux_86/platform-tools:/home/hanqigcxy/android-sdk-linux_86/tools 将CTS和android SDK工具目录加入到环境变量中,如上红色部分所示。注意要求输入完整路径,各路径以分号间隔。

进入/out/host/linux-x86/cts /android-cts/repository/tools目录下,修改startcts脚本文件。将脚本中的SDK_ROOT该成自己的android SDK路径。

$cd /home/hanqigcxy/Downloads/android-cts/tools $vim startcts

修改脚本中出现的第一个SDK_ROOT,如:

"SDK_ROOT= /home/hanqigcxy/android-sdk-linux_86 "。

注意:启动CTS的时候,应该输入startcts。

3.1.3 将环境变量写入系统

上面配置环境变量使用Linux命令:

export

使用该命令设定的环境变量仅仅对当前的shell有效。如果用户再开启一个shell,那么需要再次设定环境变量。这是使用export命令的局限。但是最大的好处就是保证的系统的纯净,每次操作仅仅对当前有效。

下面提供一种将环境变量写入配置文件的方法。户用不必每次启动Shell后,都要设定环境变量:

Step1:输入命令,切换到root权限:

su

输入password回车

Step2:进入用户文件夹,编辑.bashrc文件,例如在ubuntu下我有一个用户hanqigcxy cd /home/hanqigcxy

ls -al

vim .bashrc

修改export PATH=$PATH:$HOME/bin:为:

export PATH=$PATH:$HOME/bin:

/home/hanqigcxy/android-source/out/host/linux-x86/bin:

/home/hanqigcxy/android-sdk-linux_86/platform-tools:

/home/hanqigcxy/android-sdk-linux_86/tools

Step3:启动系统

reboot –n

3.2 连接设备

3.2.1 模拟器测试

由于我们只需要用模拟器来模拟设备,因此不必搭建完整的linux下android开发环境。仅需要下载Android SDK并安装。见以下步骤:

◆安装Android SDK

Step1:点击下面链接,进入下载页面

https://www.sodocs.net/doc/d414426811.html,/sdk/index.html

Step2:点击android-sdk_r08-linux_86.tgz下载SDK

Step3:解压后文件目录

Step4:添加环境变量,在linux下输入以下命令

export Path =………….:/home/hanqigcxy/android-sdk-linux_86/tools

其中省略号代表环境变量Path原来的值,对系统原有的环境变量不能删除,仅仅在末尾加入一个新的换进变量路径即可。/home/hanqigcxy/android-sdk-linux_86/tools为android-sdk-linux_86/tools目录的全称,根据用户解压路径来定,修改的值可通过右键------属性来查阅。

Step5:输入以下命令,开启android SDK and AVD Managerment

$ android

Step6:设定代理

Step7:选定需要安装的插件

◆创建AVD

◆启动模拟器$ emulator -avd CTS

◆启动连接

再开启一个Shell,输入以下命令:

$ adb start-server

$ cts

如果连接成功将显示一下提示:

Android CTS version 2.2_r1

Device(emulator-5554) connected

cts_host > cts_host >

3.2.2 Device测试

(网络资源加自己的推测,需要设备做验证)

◆在手机上安装CtsDelegatingAccessibilityService.apk

$sudo adb install -r

………………………………………………./out/host/linux-x86/cts/android-cts/repository/testcases/CtsD elegatingAccessibilityService.ap k

省略号代表CtsDelegatingAccessibilityService.ap k所需要的完整路径

◆设置手机

Settings->Accessibility->两个选项都选上;Settings > Application > Development 三个选项都选上;Settings > Sound & Display > Screen Timeout should be set to "Never Timeout";

◆修改脚本

export Path =………….:/home/hanqigcxy/android-sdk-linux_86/tools

其中省略号代表环境变量Path原来的值,对系统原有的环境变量不能删除,仅仅在末尾加入一个新的换进变量路径即可。/home/hanqigcxy/android-sdk-linux_86/tools为android-sdk-linux_86/tools目录的全称,根据用户解压路径来定,修改的值可通过右键------属性来查阅。

◆启动连接

再开启一个Shell,输入以下命令:

$ adb start-server

$ cts

如果连接成功将显示一下提示:

Android CTS version 2.2_r1

Device(emulator-5554) connected

cts_host > cts_host >

題目1:CTS 在手機上的測試步驟?(測試機HTC G7)Step 1. 通過USB 連接手機和PC

Step2. 調整HTC G7 USB的連接方式為【HTC sync】,使G7允許USB調試。

上述操作後,自動彈出以下界面

Step3. 在Linux下輸入以下命令:

切換到root權限

hanqigcxy@ubuntu:~$ sudo -s

[sudo] password for hanqigcxy:

root@ubuntu:~# adb kill-server

root@ubuntu:~# adb devices

顯示以下結果

Step4. 安裝CtsDelegatingAccessibilityService

root@ubuntu:~# adb install -r /home/hanqigcxy/android-source/out/host/linux-x86/cts/android-cts/repository/testcases/CtsD elegatingAccessibilityService.apk

顯示以下結果

Step5. 配置手機

可能根据不同的手機,設定也会不一樣,例如網上的例子要求

Settings->Accessibility->两个选项都选上;

Settings > Application > Development 三个选项都选上;

Settings > Sound & Display > Screen Timeout should be set to "Never Timeout ";

HTC G7 的實際設定:

在Step2.中選擇【保持喚醒狀態選項】

進入設置 > 應用程序 > 開發把三个选项都选上;

進入設置 > 輔助功能把兩個選項都選上

总之不管什么设备,需保证一下几点:

1. 設備的默認連接為USB調式,不能為USB充電或者USB磁盤驅動器

2.設定設備始終為喚醒狀態

3.設定權限,保證Host端操作無阻礙。

Step 開啟CTS工具進行CTS測試

題目2 adb 如何知道設備被接入?

adb usb - restarts the adbd daemon listening on USB

會有一個監聽USB的daemon,當設備通過USB介入後,可以做判斷。

connect [:] - connect to a device via TCP/IP

另外還有一通過TCP/IP的接入方法。模擬器應該是採用此方法連接。

下圖,是我同時開啟模擬器和HTC G7後,調用adb查看的設備列表

當一台PC機上連接有多個設備時(例如多個android 手機),CTS可以指定在特定的設備中運行,但需要保證,同一時間是有一個設備上在運行CTS,

並且CTS內部也有單例模式。保證一個Host端,只能運行一個CTS。

題目3 :CTS測試需要多少時間?

Host :Ubuntu 10.04(虛擬機上運行)

Client:HTC G7

報錯:Log 信息如下,也可見附件

CTS_DEBUG >>> 1295313461352 mark mNeedRestartAdbServer to true CTS_DEBUG >>> 1295313461353 Need restart ADB server

CTS_INFO >>> Max ADB operations reached. Restarting ADB...

CTS_DEBUG >>> 1295313461461 device HC09MPL00642 changed with changeMask=4

CTS_DEBUG >>> 1295313461461 Device state:ONLINE

Device(HC09MPL00642) connected

CTS_DEBUG >>> 1295313461617 device HC09MPL00642 changed with changeMask=2

CTS_DEBUG >>> 1295313461621 Device state:ONLINE

CTS_INFO >>> Restarting device ...

TS_INFO >>> Restarting device ...

CTS_DEBUG >>> 1295315511400 executeCommand(): cmd=adb -s HC09MPL00642 reboot CTS_DEBUG >>> 1295315528900 device HC09MPL00642 changed with changeMask=2

CTS_DEBUG >>> 1295315528902 Device state:ONLINE

Device(HC09MPL00642) disconnected

分析:

錯誤出現在ADB 操作超過了最大限制,必須重啟ADB

之後手機自動重啟,重新啟動後,CTS測試失敗。

嘗試修改CTS 的配置文件host_config.xml中的參數

防止手機重啟。結果失敗

網上的解答是,USB驅動出現問題,要完成測試需要做修改,我判斷是HTC修改了USB 驅動,限制了通過USB進行調試。過多的adb命令將到時重啟

我分析不像是這個原因,有個能是廠商對USB調式做了限制,或者是adb內部有問題下面用模擬器驗證一下

用模擬器進行了CTS完成測試:

創建了性模擬器,包含了所有可模擬的硬件:

結果:用了一天时间,發現CTS Plan仍然没有完整的执行完毕。但是单独执行CTS中的某一package确实比较快,分别执行CTS包含的52个package。每個平均耗時10 -15分鐘以此計算,9 -13小時可以完成測試

分析:

1. 為什麼執行完整的CTS plan 會如此耗時?

主要原因是,CTS Plan 的测试过程中,adb总会出现以下几个问题:

Max ADB operations reached. Restarting ADB... 造成设备多次重启

Installing met timeout due to Unknown reason. 造成某个apk总是安装不上,就卡在哪里不停的重新安装,当到时adb操作超过上限时,测试机重启

Uninstalling met timeout due to Unknown reason. 造成某个apk总是卸载不了,就卡在哪里不停的重新卸载,当到时adb操作超过上限时,测试机重启

2. 為什麼執行單個package時間也不短?

首先,執行單個package,重複使用adb的命令的次數少,出現問題1的概率小,不會造成adb出問題

那麼主要原因因該是:在WIN7系統上用虛擬機跑linux。這樣host端(linux)和clien 端(Android AVD)都運行在虛擬機上。硬件的利用率不高。

如果用Linux系統直接測試設備,時間應該會短一點。

結論:

1. 建議不要執行整個Plan,分Package 或Test執行,比較好

2. 在一次測試結束後,不論結果成功與否,都要將CTS所安裝的apk完全卸載,避免下次測試失敗。

3. 建議不要在虛擬機上跑Linux,直接裝Linux系統。

另外需要更正一點:

測試結果,包含package的測試是否通過

也包含每個test item 的測試情況。

3.2 CTS 命令详解

在讲解CTS命令之前,先阐述CTS测试中几个概念:

Test Plan(Plan):测试计划,Test package的集合,每次Plan中都包含若干个测试包 Test Package(Package):测试包,Test case的集合

Test case:测试用例,Test的集合

Test:测试,每一个测试对应一个或者多个Instrumentation Test

Instrumentation Test:Android测试环境的核心是一个Instrumentation框架,在这个框架下,你的测试应用程序可以精确控制应用程序。使用Instrumentation,你可以在主程序启动之前,创建模拟的系统对象,如Context;控制应用程序的多个生命周期;

发送UI事件给应用程序;在执行期间检查程序状态。Instrumentation框架通过将主程序和测试程序运行在同一个进程来实现这些功能。关于Instrumentation将在下一节CTS测试的含义及原理中详细介绍。这里只要明确一个概念。

Result_Type:CTS的测试结果可以通过命令查阅,也可以通过浏览器查看下結果文件命令查阅结果:

其中Test result 有四种类型的值:Pass,Fail,Timeout,NoExecuted

浏览器查看XML文件:

运行Performance 测试Plan

结果文件testResult.xml.

路径:/out/host/linux-x86/cts/android-cts/repository/results/2011.01.04_00.16.40

上图为performance plan所包含的Test package的测试结果,可以看到这次测试每一个Test package的测试结果类型(result_type)都为Timeout,关于测试结果的分析,我们将在CTS Debug分析中介绍,这里主要让大家明确result_type的含义。

小结一下,为了理解CTS命令的意义,我们必须明确Plan,Package,Testcase,Test,result_type,session的含义:

CTS将Test组合为Testcase,Testcase再组合为Package,最后由Package组合为Plan。

CTS可以执行一个Plan,一个Plan的某个Package,一个Plan的某个Test。

CTS执行的结果以Session_ID来标识一个测试结果。

CTS的结果类型result_type包含Pass,Fail,Timeout,NoExecuted四种

上面的介绍,主要想帮助大家理解CTS命令。下表详细列出的CTS命令。

参考资料:Compatibility Test Suite (CTS) Framework UserManual选择红色部分下载。

4. CTS测试的含义及原理

4.1 CTS Plan

在android 2.2的cts中包含8个可用的Test Plan

1) CTS:包含21000个测试,这些测试是检验兼容性所必须的,性能测试不包含在本计

划中。随本版的跟新,本测试计划也将更新。

2) Signature:包含所有针对公有APIs的署名测试。

相关主题