转:
1. CTS 测试
用 USB 连接开发板和办公电脑,就可以开始进行 cts 测试了。Time: 599.253s
CTS测试步骤
前言:CTS2.3测试方法几乎和CTS2.2相同,只有平台准备工作有差别。目前CTS2.3最新版本是r9,可以从android官网上下载。
第一:平台准备工作
第二:新建CTS测试任务
第三:继续以前未完成的CTS测试任务
第四:关于CTS测试报告
第五:逐个对Fail的测试项进行测试
第六:批量测试Fail和Timeout case
第七:注意事项
第一部分:平台准备工作
1.进入settings->Privacy->Factorydata reset,对平台进行reset一次(如果是自己的设备,就不要reset了,否则蛋疼……)
2.平台安装CtsDelegatingAccessibilityService.apk、CtsDeviceAdmin.apk 和 CtsPerformanceTestCases.apk。 (这3个apk都可以在cts测试包 repository/testcases文件夹中找到)
3.进入settings->Wireless& networks,连接AP (AP需要连外网,最好链接VPN),打开Bluetooth、GPS(如果有的话)
4.进入settings->display->screentimeout,设为never timeout,如果没有这个选项,则设为30 minutes
5.进入settings->display,勾选auto-rotatescreen
6.进入Settings -> Location & security -> Select device administrators,勾选所有选项(android.deviceadmin.cts.*)
7.进入settings->applications, 不要勾选Unknown sources选项
8.进入settings->applications->development,勾选USBdebugging, stay awake和allow mock locations三项
9.进入settings->accessibility,勾选accessibility和CtsDelegatingAccessibilityService两项
10.进入settings->language& keyboard->select lanuage,设为English(United States)
11.平台插入一张TF卡(最好是空卡)
12.平台接电源(手机一般通过USB充电,没有外接电源。Pad有外接电源)
第二部分:新建CTS测试任务(每次输入后加回车)
1.平台用USB线连接LinuxPC(连通后平台左上方会显示usb和debug icon)
2.打开终端
3.输入sudosu -
输入root密码
4.输入cd ../..
输入 cd/home/linux/cts/android-cts-2.3_r9-x86/android-cts/tools (这个路径只是例子,各位需要输入实际路径)
输入 ./startcts
终端显示 Android CTS version 2.3_r9
Device(HT9CVP823190) connected (如果没有这行,说明设备没有和PC联通)
cts_host >
5.输入start --plan CTS
终端显示 There are 2 existing session(s) for plan CTS.
Create a new session or choose anexisting one?
Create a new session [0] (建立一个新测试任务)
Choose a session [1] (选择以前没有完成的测试任务)
6.输入数字 "0",开始CTS测试
第三部分:继续以前未完成的CTS测试任务(每次输入后加回车)
1.平台用USB线连接LinuxPC(连通后平台左上方会显示usb和debug icon)
2.打开终端
3.输入sudosu -
输入root密码
4.输入cd ../..
输入 cd/home/linux/cts/android-cts-2.3_r9-x86/android-cts/tools
输入 ./startcts
终端显示 Android CTS version 2.3_r9 Device(HT9CVP823190) connected (如果没有这行,说明设备没有和PC联通)
cts_host >
5.输入ls -r
终端显示
List of all results:
Session Test result Pass Fail Timeout Omitted NotExecuted Start time End time Test plan name
1 851 10 0 0 12713 2011.05.17 16:24:06 2011.05.17 16:23:49 CTS
3 8584 47 1 0 4942 2011.05.19 15:03:25 2011.05.19 15:03:08 CTS
(根据start time和Endtime时间,确定你要的任务的session编号)
6.输入start --plan CTS
终端显示 There are 2 existing session(s) for plan CTS.
Create a new session or choose anexisting one?
Create a new session [0] (建立一个新测试任务)
Choose a session [1] (选择以前没有完成的测试任务)
7.输入数字 "1"
终端显示 Please choose a session from the existedsession(s):
1 [0]
3 [1]
(左边的数字是session的编号,右边方括号内的数字是session对应的选择用的数字)
8.例如,我们选择session 3
输入数字 "1"
终端显示 resume test plan CTS(session id = 3)
==============================================================
……
(此时CTS程序开始测试session3未完成的测试)
第四部分:关于CTS测试报告
1.CTS测试报告是自动生成一个xml报表,并自动填写的,不需要测试人员干预
2.当一个CTS测试任务开始时,会在android-cts-2.3_r9-x86/android-cts/repository/results中,为这个任务建立一个存放测试报告的文件夹和压缩包,文件名以任务开始的日期和时间命名。
例如:2011.05.12_13.00.03,2011.05.12_13.00.03.zip
3.CTS测试任务完成后,打开这个文件夹中的testResult.xml(用firefox或IE浏览器打开),查看报表是否完全。
4.确认报表后,将整个文件夹复制出来,然后压缩后发给相关人员
第五部分:逐个对Fail的测试项进行测试(根据经验,有些Fail case测试第二遍会Pass)
1.前提条件是要保留之前的CTS测试报告文件夹,如果没有则无法重新测试
2.平台用USB线连接LinuxPC (连通后平台左上方会显示usb和debugicon)
3.打开终端
4.输入sudosu -
输入root密码
5.输入cd ../..
输入 cd/home/linux/cts/android-cts-2.3_r9-x86/android-cts/tools
输入 ./startcts
终端显示 Android CTS version 2.3_r9
Device(HT9CVP823190) connected (如果没有这行,说明设备没有和PC联通)
cts_host >
6.输入ls -r
终端显示
List of all results:
Session Test result Pass Fail Timeout Omitted NotExecuted Start time End time Test plan name
1 851 10 0 0 12713 2011.05.17 16:24:06 2011.05.17 16:23:49 CTS
3 8584 47 1 0 4942 2011.05.19 15:03:25 2011.05.19 15:03:08 CTS
(根据start time和Endtime时间,确定你要的任务的session编号)
7.输入ls-r fail -s # (#表示 session编号,列出这个session中fail的项目)
终端显示 Result of session 3
Result Case name
==============================================================
fail android.accessibilityservice.cts.AccessibilityEndToEndTest#testTypeViewSelectedAccessibilityEvent
fail android.accessibilityservice.cts.AccessibilityEndToEndTest#testTypeViewClickedAccessibilityEvent
fail android.accessibilityservice.cts.AccessibilityEndToEndTest#testTypeViewLongClickedAccessibilityEvent
……
8.start --plan CTS -t XXXX#YYYY(XXXX#YYYY是指 Casename)
例如: start --plan CTS -tandroid.accessibilityservice.cts.AccessibilityEndToEndTest#testTypeViewSelectedAccessibilityEvent
终端显示 Please choose a session from the existedsession(s):
1 [0]
3 [1]
9.输入数字"1",开始测试这个项目
10.测试完成后,可以接着测试下一项,直到全部完成。CTS会自动在测试报表中,将新的测试结果替换以前的测试结果。
第六部分:批量测试Fail和Timeout case (警告:这操作是为了方便测试,决不能用此方法篡改测试结果去欺骗他人)
说明:有时测试后产生上百个甚至更多的Fail和Timeout case,一个个测试需要很多时间,而且Timeout case无法用第五部分的方法测试。但是,CTS会自动测试未测试的Case,就是"notExecuted case"。我们可以利用这一点,将测试结果中的Fail和Timeout case的状态改成"notExecuted",启动CTS选择"Choose a session",自动批量测试这些Case。
1.这个操作会修改测试报告的数据,所以之前一定要备份之前的CTS测试报告文件夹
2.打开终端(用鼠标在窗口操作更方便)
3.进入home/linux/cts/android-cts-2.3_r9-x86/android-cts/repositoy/results。在results文件夹内,按测试时间找到你要的测试结果文件夹,负责到桌面
4.在桌面进入这个文件夹,右击testresult.xml,选择open with-> text editor,以文本方式打开文件
5. 在打开后的testresult.xml文本文件中,点击search->replace,寻找所有的 "result="timeout" 和 "result="fail" 位置,并替换成 result="notExecuted"
例如:修改前
修改后
修改后先保存结果。如果对修改结果有怀疑,可以不保存并退出,再次打开修改。
6.修改Case状态后,还要修改测试报告的统计数据
将failed和timeout归零,notExeuted数据等于修改过的fail和timeout总数
修改后先保存结果。
7.将修改后的"testresult.xml"连同另外4个文件替换掉android-cts-2.3_r9-x86/android-cts/repositoy/results中的文件。另外,原/repositoy/results文件夹和文件都有权限设置,所以在替换文件前,打开终端登录root帐号,用chmod命令修改权限。(具体操作在此不再描述)
8.打开终端
9.输入sudo su -
输入root密码
10.输入cd ../..
输入 cd/home/linux/cts/android-cts-2.3_r9-x86/android-cts/tools
输入 ./startcts
终端显示 Android CTS version 2.3_r9 Device(HT9CVP823190) connected (如果没有这行,说明设备没有和PC联通)
cts_host >
11.输入ls -r
终端显示
List of all results:
Session Test result Pass Fail Timeout Omitted NotExecuted Start time End time Test plan name
1 851 10 0 0 12713 2011.05.17 16:24:06 2011.05.17 16:23:49 CTS
3 8584 47 1 0 4942 2011.05.19 15:03:25 2011.05.19 15:03:08 CTS
(根据start time和Endtime时间,确定你要的任务的session编号)
12.输入start --plan CTS
终端显示 There are 2 existing session(s) for plan CTS.
Create a new session or choose anexisting one?
Create a new session [0] (建立一个新测试任务)
Choose a session [1] (选择以前没有完成的测试任务)
13.输入数字 "1"
终端显示 Please choose a session from the existedsession(s):
1 [0]
3 [1]
(左边的数字是session的编号,右边方括号内的数字是session对应的选择用的数字)
14.例如,我们选择session 3
输入数字 "1"
终端显示 resume test plan CTS(session id = 3)
==============================================================
……
(此时CTS程序开始测试session3 notExecuted的Case)
第七部分:注意事项:
1.CTS要求测试平台的硬件和Android内置APK功能完好
2.CTS每次执行start –plan CTS时,CTS会搜索android-cts-2.2_r4-x86/android-cts/repository/results中的历史报表文件夹。如果文件有很多,启动速度会非常慢。所以,请定期清理results文件夹中的历史报表(直接删除报表文件夹即可)
这个一般只是出错的应用的AndroidManifest.xml中有个字段值不对。
Android:debuggable
Whether or not the application can be debugged, even when running on a device in user mode — "true" if it can be, and "false" if not. The default value is "false".
Fail的一些修改:
1、直接设置问题
estUnknownSourcesOffByDefault |
fail |
junit.framework.AssertionFailedError: Deviceshould not ship with 'Unknown Sources' enabled by default.expected:<0> butwas:<1> atandroid.provider.cts.Settings_SecureTest.testUnknownSourcesOffByDefault(Settings_SecureTest.java:183) |
这种fail最好解决,直接按照字面理解就OK,UnKnownSource没有点掉。
2、permission
-- testSensorFeatures |
fail |
junit.framework.AssertionFailedError:PackageManager#hasSystemFeature(android.hardware.sensor.accelerometer)returns true but SensorManager#getSensorList(1) shows sensors []expected: |
一般情况修改 - > frameworks/base/data/etc/*.xml 文件,例如
android.hardware.camera.xml,platform.xml等文件,这边的文件定义了设备具有的一些权限。
3、由测试而引起的非测试项出错
-- testRecordingHint |
fail |
java.lang.RuntimeException: start failed. atandroid.media.MediaRecorder.start(Native Method) |
这种情况要根据Logcat去查看RuntimeException的具体错误。通常可以先不改,因为很难查错。
4、网络问题
-- test_isReachable |
fail |
java.net.UnknownHostException: Unable to resolvehost "www.google.com": No address associated with hostname atjava.net.InetAddress.lookupHostByName(InetAddress.java:426) |
这类问题是由于国内的网络无法访问国外网站导致的,最好的办法就在公司搭建一个VPN,链接出去。
5、系统文件权限
-- testAllFilesInSysAreNotWritable |
fail |
junit.framework.AssertionFailedError: Foundwritable: [/sys/devices/platform/malata_ts.0/tsclass/tsclass0/ts_power,/sys/devices/platform/malata_ts.0/tsclass/tsclass0/ts_en_file,/sys/devices/platform/malata_ts.0/tsclass/tsclass0/ts_Calibrate] atandroid.permission.cts.FileSystemPermissionTest. testAllFilesInSysAreNotWritable(FileSystemPermissionTest.java:364) |
-- testNoSetuidTcpdump |
fail |
junit.framework.AssertionFailedError at android.security.cts.BannedFilesTest. assertNotSetugid(BannedFilesTest.java:59) |
这些问题是系统文件权限的问题,解决方法比较土,就是全局搜索该文件,查看那些对该文件操作的脚本,然后修改即可。
上面两个fail的解决方法是:
a. 修改kernel/drivers/input/touchscreen/malata_ts.c
__ATTR(ts_power, 0777, NULL,ts_set_point),
__ATTR(ts_en_file, 0777, NULL,ts_set_point),
__ATTR(ts_ Calibrate, 0777,NULL, ts_set_point),
b. 修改system/core/include/private/android-filesystem-config.h
{ 06755, ADD_ROOT, ADD_ROOT,“system/xbin/tcpdump”}
6、这种情况最多的。
-- testFocusDistances |
fail |
junit.framework.ComparisonFailure:expected: android.hardware.cts.CameraTest.testFocusDistancesByCamera (CameraTest.java:1386) |
对于这个fail的原因是CTS对摄像头测试时,对摄像头进行参数设置,然后在读取参数后,参数出错。
这种情况要找到CameraTest源码,通常在source/cts/...下面,我们编译时没有编译到这里,仅查看代码,例如找到CameraTest.java,打开后找到1386行,行数一般情况下不会有出入,除非source下面的cts版本和下载的cts版本不一致才会找不到,找到testFocusDistancesByCamera,然后根据代码查看具体的测试,然后在找camera的源代码,使用Log跟踪,当然这个测试一定要结合做该模块的人一起改才行,不然很容易引起其他问题。
其中camera CTS测试代码在:
source/cts/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
摄像头设置的相关代码在:Source/device/Samsung/exynos4/libcamera/下面,有SecCameraHWInterface_zoom.cpp、SecCameraHWInterface_zoom.h、SecCamera_zoom.cpp、SecCamera_zoom.h
找到之后通过修改后测试再修改后再测试直到CTS PASS。
(对于摄像头,应注意是几个摄像头,不然测试可能会对两个一起测试,这样就算一个摄像头调好了,能PASS了,另外一个过不了也是FAIL的。)