如何debug android cts
启动和关闭ADB服务(adb start-server和adbkill-server)
经作者测试,模拟器在运行一段时间后,adb服务有可能(在Windows进程中可以找到这个服务,该服务用来为模拟器或通过USB数据线连接的真机服务)会出现异常。这时需要重新对adb服务关闭和重启。当然,重启Eclipse可能会解决问题,但那比较麻烦。如果想手工关闭adb服务,可以使用如下命令:
1. adb kill-server
在关闭adb服务后,要使用如下命令启动adb服务:
1. adb start-server
链接DLNA网络的命令:
ifconfig eth0 down; ifconfig eth0 hw ether 00:00:00:00:fd:87; ifconfig eth0 up; udhcpc
下面的方法是更适合RD 来debug CTS issue的cts运行方式, 这样解决了一个大问题: 如果用android传统方式去运行cts的话,必然已经被cts 运行环境占用了adb端口,用eclipsedebug就无法在另外一台机器上进行(例如RDPC, eclipse debug也需要adb ), 唯一的方式, 就是把android的source code搬到cts 运行的ubuntu机器上, 由于size特别大,非常不便.
下面介绍的运行方式, 直接用adb 去模拟 cts环境的运行方式, 唯一的缺点是, 一个test一个test 的运行. 但是, 对RD来说,这反而是优点! 方便快捷.
这个方法概括一下就是: 在我们的branch 上就有cts 的sourcecode, 我们可以修改其中某个test case所对应的 apk source, 之后,build 出 apk, 然后安装到板子上去run. 如果我们修改的testcase apk,就是添加了一些message/log之类的, 就立即可以在运行过程中体现出来. 同时,我们可以利用eclipse/ddms相结合 debug android framework部分, 当然, 由于我们也有apk的sourcecode, 也可以debug test case apk本身.
请参考:
剛做完實驗 , 寫下 SOP 給各位參考…
之後若有 RD 需要, 也可以參考這份….
Steps:
1)cmd> cd android/ics-4.x (到 android 目錄)
2)cmd>make cts
的cts 版本 ?
A)cmd> catandroid/ics-4.x/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java| grepCTS_BUILD_VERSION
Result:public static final String CTS_BUILD_VERSION = "4.0.3_r2";
3)cmd>cd out/host/linux-x86/cts/android-cts/repository/testcases
4)找到需要測試的apk 並copy 到PC端file folder
Ex: CtsTestStubs.apk, CtsOsTestCases.apk, android.core.tests.runner.apk, CtsMyExampleTestCases.apk
5)確定PC 可用adb 連到target
6)
cmd>adbinstall CtsMyExampleTestCases.apk (安裝需要測試的 apk)
cmd>adb install CtsTestStubs.apk (這是google大多原生testapk 需要用到的 stub)
cmd>adbinstall CtsOsTestCases.apk
cmd>adbinstall android.core.tests.runner.apk
7)cmd>adb shell pm list instrumentation (用來查看已經安裝的instrumentation, 每個 CTS 用測的 apk 都是用instrumentation)
Result:
Instrumentation:com.android.cts.myexample/android.test.InstrumentationTestRunner (target=com.android.cts.myexample)
8)
整個 package 測試
cmd>adbshell am instrument –w –r com.android.cts.myexample/android.test.InstrumentationTest(執行該 test package)
此時可查看 failed (如下:Step8 test result example),也可透過 logcat log來看 fail (如下:[test result from logcat])
單一class測試
cmd> adb shellam instrument –e classandroid.myexample.cts.MySampleCalculatorTest–w –rcom.android.cts.myexample/android.test.InstrumentationTestRunner
cmd> adb shellam instrument –e classandroid.os.cts.MyHelloTest–w –rcom.android.cts.os/android.test.InstrumentationCtsTestRunner
單一function測試
cmd> adbshell am instrument –e classandroid.myexample.cts.MySampleCalculatorTest#testAdd–w –rcom.android.cts.myexample/android.test.InstrumentationTestRunner
9) 移除測試用 apk (cmd: adb uninstall<app_name> à <app_name>可從 target 端查詢: ls /data/app )
cmd> adb uninstall com.android.cts.os
cmd> adb uninstall com.android.cts.stub
cmd> adb uninstall com.android.cts.myexample
=== [Step8: test result example] ===
INSTRUMENTATION_STATUS:id=InstrumentationTestRunner
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS:class=android.myexample.cts.MySampleCalculatorTest
INSTRUMENTATION_STATUS: stream=
android.myexample.cts.MySampleCalculatorTest:
INSTRUMENTATION_STATUS: numtests=2
INSTRUMENTATION_STATUS: test=testAdd
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS:id=InstrumentationTestRunner
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS:class=android.myexample.cts.MySampleCalculatorTest
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: numtests=2
INSTRUMENTATION_STATUS: test=testAdd
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_STATUS:id=InstrumentationTestRunner
INSTRUMENTATION_STATUS: current=2
INSTRUMENTATION_STATUS: class=android.myexample.cts.MySampleCalculatorTest
INSTRUMENTATION_STATUS: stream=
INSTRUMENTATION_STATUS: numtests=2
INSTRUMENTATION_STATUS:test=testSubtration
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS:id=InstrumentationTestRunner
INSTRUMENTATION_STATUS: current=2
INSTRUMENTATION_STATUS:class=android.myexample.cts.MySampleCalculatorTest
INSTRUMENTATION_STATUS: stream=
Failure in testSubtration:
junit.framework.AssertionFailedError:expected:<20> but was:<30>
atandroid.myexample.cts.MySampleCalculatorTest.testSubtration(MySampleCalculatorTest.java:63)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:545)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1551)
INSTRUMENTATION_STATUS:numtests=2
INSTRUMENTATION_STATUS:stack=junit.framework.AssertionFailedError: expected:<20> but was:<30>
at android.myexample.cts.MySampleCalculatorTest.testSubtration(MySampleCalculatorTest.java:63)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:545)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1551)
INSTRUMENTATION_STATUS:test=testSubtration
INSTRUMENTATION_STATUS_CODE: -2
INSTRUMENTATION_RESULT: stream=
Test results forInstrumentationTestRunner=..F
Time: 0.079
FAILURES!!!
Tests run: 2, Failures: 1, Errors: 0
INSTRUMENTATION_CODE: -1
===[test result from logcat] ====
/ethernet(6210): Loading ethernet jni class
D/AndroidRuntime(6210): Calling main entry com.android.commands.am.Am
I/ActivityManager(1143): Force stopping package com.android.cts.myexample uid=10036
I/ActivityManager(1143): Start proc com.android.cts.myexample for added applicationcom.android.cts.myexample: pid=6220 uid=10036 gids={}
I/TestRunner(6220): started: testAdd(android.myexample.cts.MySampleCalculatorTest)
I/TestRunner(6220): finished: testAdd(android.myexample.cts.MySampleCalculatorTest)
I/TestRunner(6220): passed: testAdd(android.myexample.cts.MySampleCalculatorTest)
I/TestRunner(6220): started: testSubtration(android.myexample.cts.MySampleCalculatorTest)
I/TestRunner(6220): failed: testSubtration(android.myexample.cts.MySampleCalculatorTest)
I/TestRunner(6220): ----- begin exception -----
I/TestRunner(6220):
I/TestRunner(6220): junit.framework.AssertionFailedError: expected:<20> butwas:<30>
I/TestRunner(6220): at junit.framework.Assert.fail(Assert.java:47)
I/TestRunner(6220): atjunit.framework.Assert.failNotEquals(Assert.java:282)
I/TestRunner(6220): at junit.framework.Assert.assertEquals(Assert.java:64)
I/TestRunner(6220): atjunit.framework.Assert.assertEquals(Assert.java:201)
I/TestRunner(6220): atjunit.framework.Assert.assertEquals(Assert.java:207)
I/TestRunner(6220): at android.myexample.cts.MySampleCalculatorTest.testSubtration(MySampleCalculatorTest.java:63)
I/TestRunner(6220): at java.lang.reflect.Method.invokeNative(NativeMethod)
I/TestRunner(6220): at java.lang.reflect.Method.invoke(Method.java:511)
I/TestRunner(6220): at junit.framework.TestCase.runTest(TestCase.java:154)
I/TestRunner(6220): at junit.framework.TestCase.runBare(TestCase.java:127)
I/TestRunner(6220): atjunit.framework.TestResult$1.protect(TestResult.java:106)
I/TestRunner(6220): at junit.framework.TestResult.runProtected(TestResult.java:124)
I/TestRunner(6220): at junit.framework.TestResult.run(TestResult.java:109)
I/TestRunner(6220): at junit.framework.TestCase.run(TestCase.java:118)
I/TestRunner(6220): at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
I/TestRunner(6220): atandroid.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
I/TestRunner(6220): atandroid.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:545)
I/TestRunner(6220): atandroid.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1551)
I/TestRunner(6220): ----- end exception -----
I/TestRunner(6220): finished: testSubtration(android.myexample.cts.MySampleCalculatorTest)
I/ActivityManager(1143): Force stopping package com.android.cts.myexample uid=10036
I/ActivityManager(1143): Killing proc 6220:com.android.cts.myexample/10036: force stop
D/AndroidRuntime(6210): Shutting down VM
如何debug android cts的更多相关文章
- 监听Android CTS测试项解决方案(一)
前言: 首先这里需要详细叙述一下标题中"监听Android CTS测试项解决方案"的需求.这里的需求是指我们需要精确的监听到当前CTS测试正在测试的测试项. 因为我们知道CTS认证 ...
- 监听Android CTS测试项解决方案(二)
二,监听当前测试项是否是Accelerometer Measurement Test测试项 通过第一种方式介绍的,我们可以得到当前处于活动状态的Activity类似监听CTS测试当前的测试项.但是由于 ...
- Android CTS測试Fail项改动总结(四)
Android5.1上的測试 1.android.security.cts.SELinuxDomainTest# testInitDomain fail 打印的log junit.framework. ...
- android CTS测试
CTS认证是获得Google推出的Android系统中Android Market服务的前提 CTS兼容性测试的主要目的和意义在于使得用户在Android系统的应用过程中,有更好的用户体验,并展现出A ...
- Android CTS 测试总结【转】
Android CTS 测试总结[转] 最近一直在做Android兼容性测试,根据Android官网给出的android-cts-manual 配置好了device后,开始测试. 首先配置软件环境: ...
- 如何获取Debug Android Hash Key
在接入FaceBook第三方登录的时候,需要获取Android Hash Key. Android Hash Key即密钥散列有两种,一种是开发秘钥散列,一种是发布秘钥散列.这里主要介绍如何获取开发秘 ...
- Android N和O中使用adb shell dpm set-device-owner 'com.android.cts.verifier/com.android.cts.verifier.managedprovisioning.DeviceAdminTestReceiver' setup Device Owner失败
PC端出现如下log: D:\workspace\AndroidO\CTS\CTS_Verifier>adb shell dpm set-device-owner 'com.android.ct ...
- Android CTS Test
什么是CTS测试?了解这个问题前,我们先来搜索了解一遍“Google GMS 认证”.GMS全称为GoogleMobile Service,即谷歌移动服务.说白了GMS其实就是一系列谷歌的应用集合.谷 ...
- Android CTS Test failed to run to conmpletion 测试超时问题
引用“Android cts all pass 全攻略”里面的一段话: ❀ testcase timeout 测试某个testcase的时候一直出现 “........”,迟迟没有pass或者fail ...
随机推荐
- C++ 知识点1
typedef的陷阱 严格来说typedef并不是定义别名,而是定义类型,比如typedef int a;按照大部分书本说来,就是把a看做int,这种说法初学看来是正确的,也易于理解,但是遇到type ...
- java学习笔记 (5) —— Struts2 监听器配置
1.创建MyListener.java 实现 PreResultLisener 接口 import com.opensymphony.xwork2.ActionInvocation; import c ...
- [Mugeda HTML5技术教程之6]添加元素
我们上节讲了怎么创建新作品.新作品创建好后,我们就可以在里面添加内容了.这一节,我们将要讲述如何在作品中添加元素.动画的中的内容都是以各种元素的形式组成的.对于添加到舞台上的元素,我们可以在时间线上添 ...
- 开源 一行代码实现多形式多动画的推送小红点WZLBadge(iOS)-备用
更新日志 V1.2 2015.09.25 1.UITabBarItem badge is supproted; 2.Enable change badge properties when badge ...
- SVN莫名出错,网上找遍无果,递归删除当前目录下所有.svn文件名
哎,太深刻的教训. 原来以前其它目录里有.SVN目录 ,而此SVN目录COPY到真正的SVN工作目录之后,会将有用的.SVN目录覆盖. 那么一样,显然,CI,UPDATE,CO之间的命令全部异常... ...
- [LeetCode 121] - 买入与卖出股票的最佳时机(Best Time to Buy and Sell Stock)
问题 假设你有一个数组,其中的第i个元素表示一只股票在第i天的价格. 如果只允许你完成一次交易(即买入并卖出股票一次),设计一个找出最大利润的算法. 初始思路 和122一样,基于买入与卖出股票的最佳时 ...
- LeetCode_Trapping Rain Water
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- LeetCode_Unique Paths
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...
- 代理模式 - OK
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式的优点: ...
- ImageButton自定义按钮的按下效果的高效实现方法(非一般)
通常情况下,我们可以采用如下方式实现: <?xml version="1.0" encoding="UTF-8"?> <selector xm ...