如何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 ...
随机推荐
- Scala学习笔记--文件IO
补充: http://blog.csdn.net/lyrebing/article/details/20369445 http://developer.51cto.com/art/200907/134 ...
- iOS 9的 Universal Links 通用链接使用
前段时间和朋友(@品味生活)一起搞 iOS9的通用链接,我主要做了前面官方文档翻译工作,后面的一些东西都是他在搞,整理也是他整理的. 他的博客原文地址:http://pinwei.blog.51cto ...
- 将主机IDS OSSEC日志文件存入MYSQL的方法
将主机IDS OSSEC日志文件存入MYSQL的方法 http://www.freebuf.com/articles/system/6139.html http://ossec-docs.readth ...
- Qt事件机制浅析(定义,产生,异步事件循环,转发,与信号的区别。感觉QT事件与Delphi的事件一致,而信号则与Windows消息一致)
Qt事件机制 Qt程序是事件驱动的, 程序的每个动作都是由幕后某个事件所触发.. Qt事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. Qt事件的类型很多, 常见的qt的事件如下: 键盘事 ...
- wpf只运行一个实例
原文:wpf只运行一个实例 在winform下,只运行一个实例只需这样就可以: 1. 首先要添加如下的namespace: using System.Threading; 2. 修改系统Main函数, ...
- MySQL常用时间函数
官方文档:Date and Time Functions Name Description ADDDATE() Add time values (intervals) to a date value ...
- Oracle索引状态查询&索引重建
--检查损坏索引 SELECT status, COUNT(*) FROM dba_indexes GROUP BY status UNION SELECT status, COUNT(*) ...
- 关于bootstrap--表单(水平表单)
在Bootstrap框架中要实现水平表单效果,必须满足以下两个条件:1.在<form>元素是使用类名“form-horizontal”.2.配合Bootstrap框架的网格系统.(网格布局 ...
- poj 2441 Arrange the Bulls(状态压缩dp)
Description Farmer Johnson's Bulls love playing basketball very much. But none of them would like to ...
- 图片实时预览JSP加js
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...