测试基础 【已解决】Error=Unable to find instrumentation info for: ComponentInfo

叶子 · 2015年03月03日 · 最后由 叶子 回复于 2015年03月04日 · 3722 次阅读

错误:Error=Unable to find instrumentation info for: ComponentInfo{xxx.xxx.xxx/xxxx}INSTRUMENTATION_STATUS_CODE: -1
解决方法:产生这个问题的原因一般有两种情况

  • 1.仅安装了被测试程序的 apk,没有安装测试程序的 apk 需要用命令 adb shell pm list instrumentation 查看是否安装成功。
  • 2.测试程序 AndroidManifest.xml 中的包名没有写对,
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="测试程序的包名"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="15" />

    <instrumentation
        android:name="pl.polidea.instrumentation.PolideaInstrumentationTestRunner"
        android:targetPackage="被测程序的包名" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <uses-library android:name="android.test.runner" />
    </application>

</manifest>

我属于情况 1
问题描述:在命令行中用 adb shell am instrument 执行测试程序会报如下错误,如果用 Eclipse 运行一次则不会再报

操作:在用命令运行执行-w com.ktplay.testing.internal/com.ktplay.testing.common.InstrumentationTestRunner2命令 测试程序报如下错误:


E:\ktplay-android-sdk\sdk\ktplay_testing\ktplay_testing_internal>adb shell am instrument -w com.ktplay.testing.internal/com.ktplay.testing.common.InstrumentationTestRunner2
INSTRUMENTATION_STATUS: id=ActivityManagerService
android.util.AndroidException: INSTRUMENTATION_FAILED: com.ktplay.testing.internal/com.ktplay.testing.common.InstrumentationTestRunner2INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.ktplay.testing.internal/com.ktplay.testing.common.InstrumentationTestRunner2}
INSTRUMENTATION_STATUS_CODE: -1

        at com.android.commands.am.Am.runInstrument(Am.java:616)
        at com.android.commands.am.Am.run(Am.java:118)
        at com.android.commands.am.Am.main(Am.java:81)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:235)
        at dalvik.system.NativeStart.main(Native Method)

E:\ktplay-android-sdk\sdk\ktplay_testing\ktplay_testing_internal>

下边是 AndroidManifest.xml 文件内容

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ktplay.testing.internal"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="4" />

   <instrumentation
        android:name="com.ktplay.testing.common.InstrumentationTestRunner2"
        android:targetPackage="com.ktplay.sample" />
 <!--       <instrumentation
        android:name="com.zutubi.android.junitreport.JUnitReportTestRunner"
        android:targetPackage="com.ktplay.sample" />
  --> 
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <uses-library android:name="android.test.runner" />
    </application>

</manifest>

猜测:这个错误在命令行中运行会报,如果用 Eclipse 运行一次则不会再报,感觉是 Eclipse 帮它装了些什么似的,如果我在命令行中运行,是需要先做一些什么操作呢?

InstrumentationTestRunner2 是我自己写的一个 testrunner,如果在 Eclipse 中运行,只要配置一下 Instrumentation runner

用命令adb shell pm list instrumentation可以查看模拟器中已安装的 instrumentation packages,


C:\Users> adb shell pm list instrumentation
instrumentation:com.android.emulator.connectivity.test/android.test.InstrumentationTestRunner (target=com.android.emulator.connectivity.test)
instrumentation:com.android.emulator.gps.test/android.test.InstrumentationTestRunner (target=com.android.emulator.gps.test)
instrumentation:com.android.smoketest.tests/com.android.smoketest.SmokeTestRunner (target=com.android.smoketest)
instrumentation:com.android.smoketest.tests/android.test.InstrumentationTestRunner (target=com.android.smoketest)
instrumentation:com.example.android.apis/.app.LocalSampleInstrumentation (target=com.example.android.apis)

可以看到模拟器上默认安装了系统自带的/android.test.InstrumentationTestRunner,而没有我自己的 com.ktplay.testing.common.InstrumentationTestRunner2

解决
在测试时不仅需要安装被测试程序的 apk,同时需要将测试程序生成的 apk 同时安装到模拟器或手机上。

在 Eclipse 上 Run as Android junit test 时它自己会把测试 apk 装到模拟器上,所以可以正常运行,而用命令的时候没有安装,所以会报这个错。现在用 adb shell am instrument 查看,就会显示出我的 com.ktplay.testing.common.InstrumentationTestRunner2

C:\Users\KTplay> adb shell pm list instrumentation
instrumentation:com.android.emulator.connectivity.test/android.test.InstrumentationTestRunner (target=com.android.emulator.connectivity.test)
instrumentation:com.android.emulator.gps.test/android.test.InstrumentationTestRunner (target=com.android.emulator.gps.test)
instrumentation:com.android.smoketest.tests/com.android.smoketest.SmokeTestRunner (target=com.android.smoketest)
instrumentation:com.android.smoketest.tests/android.test.InstrumentationTestRunner (target=com.android.smoketest)
instrumentation:com.example.android.apis/.app.LocalSampleInstrumentation (target=com.example.android.apis)
instrumentation:com.ktplay.testing.internal/com.ktplay.testing.common.InstrumentationTestRunner2 (target=com.ktplay.sample)

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 30 条回复 时间 点赞

你问题不是这样问的,你至少 test project 的设置等等都说明下,否则以上都是你看到的和你查的,你会误导大家的思路

#1 楼 @monkey 刚才还没写完

#2 楼 @emily 没有写完,以后发了,我就删掉了

#2 楼 @emily 你运行命令的流程是怎么做的呀?

#4 楼 @monkey 首先把 apk 安装到模拟器,然后执行 adb shell am instrument 命令

#5 楼 @emily 两个 apk?

#3 楼 @monkey 不要这么铁面吧,我刚走开了一下怕等会儿没了,就点保存了

#7 楼 @emily 发到一半的自己保存就好了,发出来何必呢

#8 楼 @monkey 刚进来,还没熟悉这个发贴流程,直接选的发布新贴,保存后就直接发出来了。

#9 楼 @emily 先说问题,装了几个

叶子 #11 · 2015年03月03日 Author

#10 楼 @monkey 装了一个被测程序

#11 楼 @emily 那测试的呢?

叶子 #13 · 2015年03月03日 Author

#12 楼 @monkey 测试什么也没装,直接运行的命令,要装什么吗?怎么装?

叶子 #14 · 2015年03月03日 Author

#12 楼 @monkey 测试程序是根据被测试程序建的 Android Test Project

#14 楼 @emily 。。。。。。你不装,怎么会有你的 test runner 呢。。。

@emily 建议先 new 一个 Android Sample Project > SpinnerTest,这个例子是 Android 自带的 Instrumentation 例子

叶子 #18 · 2015年03月03日 Author

#15 楼 @monkey 你可能没太明白我的问题,我现在正在找怎么装 test runner,Android Test Project 不会样被测程序那样会有 apk 可以装

叶子 #19 · 2015年03月03日 Author

#16 楼 @xuxu 我现在是用 Eclipse 可以运行,但在命令行中 adb shell am instrument 会报错

#18 楼 @emily 你测试 apk 不装,怎么有 test runner 呢。。。。

#16 楼 @xuxu 你看懂了么。。

叶子 #22 · 2015年03月03日 Author

#20 楼 @monkey 对,是我想错了,谢谢,是应该把测试程序和被测程序都装上 apk。

#22 楼 @emily =。=。。。。

叶子 #24 · 2015年03月03日 Author

问题解决了,是我想错了,是应该把测试程序和被测程序 apk 都装上,在 Eclipse 上 Run as Android junit test 时它自己会把测试 apk 装到模拟器上,所以可以正常运行,而用命令的时候没有安装,所以会报这个错。现在用 adb shell am instrument 查看,就会显示出我的 com.ktplay.testing.common.InstrumentationTestRunner2,谢谢@Monkey


C:\Users\KTplay> adb shell pm list instrumentation
instrumentation:com.android.emulator.connectivity.test/android.test.InstrumentationTestRunner (target=com.android.emulator.connectivity.test)
instrumentation:com.android.emulator.gps.test/android.test.InstrumentationTestRunner (target=com.android.emulator.gps.test)
instrumentation:com.android.smoketest.tests/com.android.smoketest.SmokeTestRunner (target=com.android.smoketest)
instrumentation:com.android.smoketest.tests/android.test.InstrumentationTestRunner (target=com.android.smoketest)
instrumentation:com.example.android.apis/.app.LocalSampleInstrumentation (target=com.example.android.apis)
instrumentation:com.ktplay.testing.internal/com.ktplay.testing.common.InstrumentationTestRunner2 (target=com.ktplay.sample)

以后有问题可以找 monkey _^

妹子出来了,Monkey 非常热心地解决了妹子的问题。

妹子把解决方案附到帖子内容里,然后加个【已解决】方便其他人学习吧。

叶子 #30 · 2015年03月04日 Author

#29 楼 @chenhengjie123 好的,修改完了

31楼 已删除
需要 登录 後方可回應,如果你還沒有帳號按這裡 注册