CTS深入分析.docx
《CTS深入分析.docx》由会员分享,可在线阅读,更多相关《CTS深入分析.docx(33页珍藏版)》请在冰豆网上搜索。
CTS深入分析
CTSStudy
1.CTS简介
CTS全称CompatibilityTestSuite兼容性测试工具。
当电子产品开发出来,并定制了自己的Android系统后,必须要通过最新的CTS检测,以保证标准的androidapplication能运行在该平台下。
通过了CTS验证,需要将测试报告提交给Google,已取得androidmarket的认证。
CTS是一款通过命令行操作的工具。
目前cts没有提供windows版本,只能在Linux下测试。
在我们实际使用CTS的过程中,很可能需要根据特定的要求,来定制自己的TestPlan。
这时就需要自己编译CTS,因此,本文主要向大家介绍如何编译CTS,及使用编译出的CTS工具。
至于从android官网上取得的CTS,其使用方式与我们自己编译的工具类似,本文只做简单介绍。
2.获取CTS工具
假定Developer之前已经搭建好,linux环境。
以下操作均在linux下进行。
由于google的原因,Android2.3Gingerbread中的CTS是不完整的,所以我们选择Android2.2Froyo的CTS作为本文的研究对象。
以下附上Google的回复:
Theoretically,CTSforGingerbreadshouldbebuiltthesamewayasforFroyo.
However(andthisisimportant),pleasenotethattheCTSversion
that'scurrentlyinthegingerbreadbranchisincomplete.We're
workingonthat,butthelongholidaybreakshavemadeprogressslower
thanusual.
从回复中看,Gingerbread中CTS的编译过程和Froyo是一样的,命令使用方法是一样的。
我猜测,有可能在Gingerbread中加入了一些新的测试,毕竟android对硬件的要求是越来越高了,从CDD可以看出。
2.1下载编译源码获取CTS工具
2.1.1下载
git下载的android源码里包含cts,位置在/cts目录下(android2.1以后版本)
如果没有也可以从此处下载git:
//android.git.kernel.org/platform/cts.git(源码70M左右)
2.1.264bitSystem步骤
我们一般配置的是32bit系统,没有对64bitsystem操作CTS做详细研究,仅仅从网上摘抄CTS工具编译步骤。
●64bitSystem
在Linux下进入android源码根目录,输入以下命令:
$build/envsetup.sh
$makects
此时生成测试计划,测试包,测试用例,和测试报告生成的目录
2.1.332bitSystem步骤
●32bitSystem
修改默认的Java环境:
sudoapt-getinstallsun-java6-jdk
sudoupdate-java-alternatives-sjava-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命令:
cpddmlib-prebuilt.jarddmlib.jar这样比较方便。
方法比较多,只要保证让脚本找到所需的jar文件。
编译:
在Linux下进入android源码根目录,输入以下命令:
$chmod777build/envsetup.sh
$build/envsetup.sh
$makects
此时生成测试计划,测试包,测试用例,和测试报告生成的目录,
编译好cts后生成的文件位置如下:
#mydroid/out/host/linux-x86/
在该目录下包含如下测试文件
◆PackageCTS:
out/host/linux-x86/cts/android-cts.zip
◆ctsmakefile:
mydroid/build/core/tasks/cts.mk
◆runctsprogram:
mydroid/out/host/linux-x86/bin/cts
◆testplans:
mydroid/out/host/linux-x86/cts/android-cts/repository/plans
◆testpackages:
mydroid/out/host/linux-x86/cts/android-cts/repository/testcases
◆testresults:
mydroid/out/host/linux-x86/cts/android-cts/repository/results
◆CTSprogramsettingsvalue:
mydroid/cts/tools/utils/host_config.xml
配置Framework环境变量:
exportANDROID_ROOT=/[MyAndroid]/out/host/linux-x86
2.2下载gongle发布的CTS工具
点击Android2.2R4CompatibilityTestSuite(CTS)下载CTS工具
现在Google最新发布的CTS工具是android2.2froyo本版的,以后可以针对需要下载对应的CTS版本。
3.使用
3.1修改环境变量
3.1.1编译的CTS
CTS和androidSDK工具目录如下:
/out/host/linux-x86/bin
/android-sdk-linux_86/platform-tools
/android-sdk-linux_86/tools
将CTS工具路径和androidSDK工具路径加入环境变量,在linux下输入以下命令:
Øenv
查阅原有环境变量,其中环境变量PATH的值为:
PATH=/home/hanqigcxy/bin:
/usr/local/sbin:
/usr/local/bin:
/usr/sbin:
/usr/bin:
/sbin:
/bin:
/usr/games:
/home/hanqigcxy/bin:
ØexportPATH=/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和androidSDK工具目录加入到环境变量中,如上红色部分所示。
注意要求输入完整路径,各路径以分号间隔。
3.1.2Goole发布的CTS
如果使用的是Google发布的CTS工具路径为:
CTS和androidSDK工具目录如下:
/android-cts/tools
/android-sdk-linux_86/platform-tools
/android-sdk-linux_86/tools
将CTS工具路径和androidSDK工具路径加入环境变量,在linux下输入以下命令:
Øenv
查阅原有环境变量,其中环境变量PATH的值为:
PATH=/home/hanqigcxy/bin:
/usr/local/sbin:
/usr/local/bin:
/usr/sbin:
/usr/bin:
/sbin:
/bin:
/usr/games:
/home/hanqigcxy/bin:
ØexportPATH=/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和androidSDK工具目录加入到环境变量中,如上红色部分所示。
注意要求输入完整路径,各路径以分号间隔。
Ø进入/out/host/linux-x86/cts/android-cts/repository/tools目录下,修改startcts脚本文件。
将脚本中的SDK_ROOT该成自己的androidSDK路径。
$cd/home/hanqigcxy/Downloads/android-cts/tools$vimstartcts
修改脚本中出现的第一个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
Ø修改exportPATH=$PATH:
$HOME/bin:
为:
exportPATH=$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开发环境。
仅需要下载AndroidSDK并安装。
见以下步骤:
◆安装AndroidSDK
Step1:
点击下面链接,进入下载页面
Step2:
点击android-sdk_r08-linux_86.tgz下载SDK
Step3:
解压后文件目录
Step4:
添加环境变量,在linux下输入以下命令
exportPath=………….:
/home/hanqigcxy/android-sdk-linux_86/tools
其中省略号代表环境变量Path原来的值,对系统原有的环境变量不能删除,仅仅在末尾加入一个新的换进变量路径即可。
/home/hanqigcxy/android-sdk-linux_86/tools为android-sdk-linux_86/tools目录的全称,根据用户解压路径来定,修改的值可通过右键------属性来查阅。
Step5:
输入以下命令,开启androidSDKandAVDManagerment
$android
Step6:
设定代理
Step7:
选定需要安装的插件
◆创建AVD
◆启动模拟器
$emulator-avdCTS
◆启动连接
再开启一个Shell,输入以下命令:
$adbstart-server
$cts
如果连接成功将显示一下提示:
AndroidCTSversion2.2_r1
Device(emulator-5554)connected
cts_host>cts_host>
3.2.2Device测试
(网络资源加自己的推测,需要设备做验证)
◆在手机上安装CtsDelegatingAccessibilityService.apk
$sudoadbinstall-r
………………………………………………./out/host/linux-x86/cts/android-cts/repository/testcases/CtsD
elegatingAccessibilityService.apk
省略号代表CtsDelegatingAccessibilityService.apk所需要的完整路径
◆设置手机
Settings->Accessibility->两个选项都选上;Settings>Application>Development三个选项都选上;Settings>Sound&Display>ScreenTimeoutshouldbesetto"NeverTimeout";
◆修改脚本
exportPath=………….:
/home/hanqigcxy/android-sdk-linux_86/tools
其中省略号代表环境变量Path原来的值,对系统原有的环境变量不能删除,仅仅在末尾加入一个新的换进变量路径即可。
/home/hanqigcxy/android-sdk-linux_86/tools为android-sdk-linux_86/tools目录的全称,根据用户解压路径来定,修改的值可通过右键------属性来查阅。
◆启动连接
再开启一个Shell,输入以下命令:
$adbstart-server
$cts
如果连接成功将显示一下提示:
AndroidCTSversion2.2_r1
Device(emulator-5554)connected
cts_host>cts_host>
題目1:
CTS在手機上的測試步驟?
(測試機HTCG7)
Step1.通過USB連接手機和PC
Step2.調整HTCG7USB的連接方式為【HTCsync】,使G7允許USB調試。
上述操作後,自動彈出以下界面
Step3.在Linux下輸入以下命令:
切換到root權限
hanqigcxy@ubuntu:
~$sudo-s
[sudo]passwordforhanqigcxy:
root@ubuntu:
~#adbkill-server
root@ubuntu:
~#adbdevices
顯示以下結果
Step4.安裝CtsDelegatingAccessibilityService
root@ubuntu:
~#adbinstall-r/home/hanqigcxy/android-source/out/host/linux-x86/cts/android-cts/repository/testcases/CtsDelegatingAccessibilityService.apk
顯示以下結果
Step5.配置手機
可能根据不同的手機,設定也会不一樣,例如網上的例子要求
Settings->Accessibility->两个选项都选上;
Settings>Application>Development三个选项都选上;
Settings>Sound&Display>ScreenTimeoutshouldbesetto"NeverTimeout";
HTCG7的實際設定:
在Step2.中選擇【保持喚醒狀態選項】
進入設置>應用程序>開發把三个选项都选上;
進入設置>輔助功能把兩個選項都選上
总之不管什么设备,需保证一下几点:
1.設備的默認連接為USB調式,不能為USB充電或者USB磁盤驅動器
2.設定設備始終為喚醒狀態
3.設定權限,保證Host端操作無阻礙。
Step開啟CTS工具進行CTS測試
題目2adb如何知道設備被接入?
adbusb-restartstheadbddaemonlisteningonUSB
會有一個監聽USB的daemon,當設備通過USB介入後,可以做判斷。
connect[:
]-connecttoadeviceviaTCP/IP
另外還有一通過TCP/IP的接入方法。
模擬器應該是採用此方法連接。
下圖,是我同時開啟模擬器和HTCG7後,調用adb查看的設備列表
當一台PC機上連接有多個設備時(例如多個android手機),CTS可以指定在特定的設備中運行,但需要保證,同一時間是有一個設備上在運行CTS,
並且CTS內部也有單例模式。
保證一個Host端,只能運行一個CTS。
題目3:
CTS測試需要多少時間?
Host:
Ubuntu10.04(虛擬機上運行)
Client:
HTCG7
報錯:
Log信息如下,也可見附件
CTS_DEBUG>>>1295313461352markmNeedRestartAdbServertotrue
CTS_DEBUG>>>1295313461353NeedrestartADBserver
CTS_INFO>>>MaxADBoperationsreached.RestartingADB...
CTS_DEBUG>>>1295313461461deviceHC09MPL00642changedwithchangeMask=4
CTS_DEBUG>>>1295313461461Devicestate:
ONLINE
Device(HC09MPL00642)connected
CTS_DEBUG>>>1295313461617deviceHC09MPL00642changedwithchangeMask=2
CTS_DEBUG>>>1295313461621Devicestate:
ONLINE
CTS_INFO>>>Restartingdevice...
TS_INFO>>>Restartingdevice...
CTS_DEBUG>>>1295315511400executeCommand():
cmd=adb-sHC09MPL00642reboot
CTS_DEBUG>>>1295315528900deviceHC09MPL00642changedwithchangeMask=2
CTS_DEBUG>>>1295315528902Devicestate:
ONLINE
Device(HC09MPL00642)disconnected
分析:
錯誤出現在ADB操作超過了最大限制,必須重啟ADB
之後手機自動重啟,重新啟動後,CTS測試失敗。
嘗試修改CTS的配置文件host_config.xml中的參數
--Numberoftestsexecutedbetweenreboots.Avalue<=0disablesreboots.-->
防止手機重啟。
結果失敗
網上的解答是,USB驅動出現問題,要完成測試需要做修改,我判斷是HTC修改了USB驅動,限制了通過USB進行調試。
過多的adb命令將到時重啟
我分析不像是這個原因,有個能是廠商對USB調式做了限制,或者是adb內部有問題下面用模擬器驗證一下
用模擬器進行了CTS完成測試:
創建了性模擬器,包含了所有可模擬的硬件:
結果:
用了一天时间,發現CTSPlan仍然没有完整的执行完毕。
但是单独执行CTS中的某一package确实比较快,分别执行CTS包含的52个package。
每個平均耗時10-15分鐘
以此計算,9-13小時可以完成測試
分析:
1.為什麼執行完整的CTSplan會如此耗時?
主要原因是,CTSPlan的测试过程中,adb总会出现以下几个问题:
MaxADBoperationsreached.RestartingADB...造成设备多次重启
InstallingmettimeoutduetoUnknownreason.造成某个apk总是安装不上,就卡在哪里不停的重新安装,当到时adb操作超过上限时,测试机重启
UninstallingmettimeoutduetoUnknownreason.造成某个apk总是卸载不了,就卡在哪里不停的重新卸载,当到时adb操作超过上限时,测试机重启
2.為什麼執行單個package時間也不短?
首先,執行單個package,重複使用adb的命令的次數少,出現問題1的概率小,不會造成adb出問題
那麼主要原因因該是:
在WIN7系統上用虛擬機跑linux。
這樣host端(linux)和clien端(AndroidAVD)都運行在虛擬機上。
硬件的