如何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 ...
随机推荐
- 自定义 select 下拉菜单
.selectBeautifyMainStyle{ color: #9fa0a0; font-size: 14px; font-family: "alegreya_sansthin" ...
- 新鲜博客出炉www.pubwin2009.net
既然不快乐,又不喜欢这里,不如一路向西去大理.不是说不喜欢博客园,而是不喜欢现在工作的公司已经向公司递了辞职申请,然后突然有个想把,就是把公司里学到的东西做一个总结,全部写下来正好阿里云可以有免费半年 ...
- android studio gradle自动签名构建实现
我为自己代言: 一.在android studio中生成签名文件. 1.在android studio 选中项目,在菜单栏中选择Build. 2.点击Generate Signed APK选项卡. 3 ...
- WebVR
WebVR 主要面向Web前端工程师,需要一定Javascript及three.js基础:本文主要分享内容为基于three.js开发WebVR思路及碰到的问题:有兴趣的同学,欢迎跟帖讨论. 目录:一. ...
- JQuery this和$(this)的区别及获取$(this)子元素对象的方法
1.JQuery this和$(this)的区别 相信很多刚接触JQuery的人,很多都会对$(this)和this的区别模糊不清,那么这两者有什么区别呢? 首先来看看JQuery中的 $() 这 ...
- 《javascript权威指南》第9章 例9-8源码
//创建一个新的枚举类型 //不能使用它来创建该类型的新实例 function Enumeration(nameToValues){ var Enumeration = function(){thro ...
- cf C. Valera and Elections
http://codeforces.com/contest/369/problem/C 先见边,然后dfs,在回溯的过程中,如果在这个点之后有多条有问题的边,就不选这个点,如果没有而且连接这个点的边还 ...
- PYTHON线程知识再研习F---队列同步Queue
让我们考虑更复杂的一种场景:产品是各不相同的.这时只记录一个数量就不够了,还需要记录每个产品的细节.很容易想到需要用一个容器将这些产品记录下来. Python的Queue模块中提供了同步的.线程安全的 ...
- 转:linux执行shell脚本的方式及一些区别
假设shell脚本文件为hello.sh放在/root目录下.下面介绍几种在终端执行shell脚本的方法: [root@localhost home]# cd /root/ [root@localho ...
- java开发经验分享(三)
三. 项目开发 1. 需求: 1) 需求最终需要开发人员在产品中实现,开发不合理的设计会浪费时间,开发技术无法实现的设计带来最大的痛苦:失败.所以,开发人员要重视需求以及需求评审,提出自己能够想到的所 ...