• 如何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 issuects运行方式, 这样解决了一个大问题: 如果用android传统方式去运行cts的话,必然已经被cts 运行环境占用了adb端口,eclipsedebug就无法在另外一台机器上进行(例如RDPC, eclipse debug也需要adb ),  唯一的方式, 就是把androidsource 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部分, 当然, 由于我们也有apksourcecode, 也可以debug test case apk本身.

     

    请参考:

    剛做完實驗 , 寫下 SOP 給各位參考…

    之後若有 RD 需要, 也可以參考這份….

    Steps:

    1)cmd> cd android/ics-4.x (到 android 目錄)

    2)cmd>make cts

    Q)  如何知道0801cts 版本 ?

    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.MySampleCalculatorTestw rcom.android.cts.myexample/android.test.InstrumentationTestRunner

       cmd> adb shellam instrument e classandroid.os.cts.MyHelloTestw rcom.android.cts.os/android.test.InstrumentationCtsTestRunner

    單一function測試

       cmd> adbshell am instrument e classandroid.myexample.cts.MySampleCalculatorTest#testAddw 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

  • 相关阅读:
    Swift
    iOS 拨打电话
    UI控件问题和XCode编译警告和错误解决方法集锦 (持续更新ing)
    让UIWebView弹出键盘上的按钮显示中文 (附效果图)
    启动app时全屏显示Default.png (附效果图)
    三种数据存储 (plist,NSUserDefaults存储,NSKeyedArchiver存模型方法)
    生成圆形头像 (附效果图)
    循环按钮,并且选中 (附效果图)
    leetcode 字符串分割对称
    leetcode merge-sorted-array/
  • 原文地址:https://www.cnblogs.com/aukle/p/3220176.html
Copyright © 2020-2023  润新知