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

叶子 · March 03, 2015 · Last by 叶子 replied at March 03, 2015 · 7765 hits

错误: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的设置等等都说明下,否则以上都是你看到的和你查的,你会误导大家的思路

叶子 #2 · March 03, 2015 作者

#1楼 @monkey 刚才还没写完

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

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

叶子 #5 · March 03, 2015 作者

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

#5楼 @emily 两个apk?

叶子 #7 · March 03, 2015 作者

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

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

叶子 #9 · March 03, 2015 作者

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

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

叶子 #11 · March 03, 2015 作者

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

#11楼 @emily 那测试的呢?

叶子 #13 · March 03, 2015 作者

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

叶子 #14 · March 03, 2015 作者

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

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

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

叶子 #18 · March 03, 2015 作者

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

叶子 #19 · March 03, 2015 作者

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

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

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

叶子 #22 · March 03, 2015 作者

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

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

叶子 #24 · March 03, 2015 作者

问题解决了,是我想错了,是应该把测试程序和被测程序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 · March 04, 2015 作者

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

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up