其他测试框架 [已解决]有人在小米盒子上做过 APP 应用的自动化测试吗?(里边有个坑)

剪烛 · 2014年04月30日 · 最后由 思寒_seveniruby 回复于 2014年05月08日 · 2389 次阅读

尝试了用 Robotium 框架,太多莫名其妙的 crash 了。
有做过类似工作的前辈吗?麻烦指条明路
http://v2.freep.cn/3tb_14050416271563e2512293.png
挺莫名其妙的,有时候上一次能跑,但是下一次就 crash 了
还有就是,经常执行一个方法以后,再执行下一个,就 crash 了。

Instrumentation crash 的日志:

05-04 15:07:09.260: E/ActivityThread(3219):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1090)
05-04 15:07:13.450: W/System.err(3219):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1174)
05-04 15:08:13.220: W/dalvikvm(3687): method Landroid/test/InstrumentationTestRunner$StringResultPrinter;.print incorrectly overrides package-private method with same name in Ljunit/textui/ResultPrinter; 
05-04 15:08:14.520: W/dalvikvm(3713): method Landroid/test/InstrumentationTestRunner$StringResultPrinter;.print incorrectly overrides package-private method with same name in Ljunit/textui/ResultPrinter; 
05-04 15:08:15.530: W/System.err(3713):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1090)
05-04 15:08:21.830: W/System.err(3713):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1174)
05-04 15:08:44.870: I/TestRunner(3713):     at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
05-04 15:08:44.870: I/TestRunner(3713):     at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
05-04 15:08:44.870: I/TestRunner(3713):     at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192)
05-04 15:08:44.870: I/TestRunner(3713):     at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
05-04 15:08:44.870: I/TestRunner(3713):     at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1671)
05-04 15:08:47.670: E/ActivityThread(3713):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1090)
05-04 15:08:53.260: W/System.err(3713):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1174)
05-04 15:11:09.840: W/dalvikvm(3931): method Landroid/test/InstrumentationTestRunner$StringResultPrinter;.print incorrectly overrides package-private method with same name in Ljunit/textui/ResultPrinter; 
05-04 15:11:10.650: W/dalvikvm(3957): method Landroid/test/InstrumentationTestRunner$StringResultPrinter;.print incorrectly overrides package-private method with same name in Ljunit/textui/ResultPrinter; 
05-04 15:11:11.670: W/System.err(3957):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1090)
05-04 15:11:18.490: W/System.err(3957):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1174)
05-04 15:11:44.210: E/ActivityThread(3957):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1090)
05-04 15:11:49.950: W/System.err(3957):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1174)
05-04 15:15:34.540: A/Environment(5134):    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1010)
05-04 15:15:52.740: W/System.err(5242):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1090)
05-04 15:16:02.530: W/System.err(5242):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1174)
05-04 15:16:56.810: W/dalvikvm(5647): method Landroid/test/InstrumentationTestRunner$StringResultPrinter;.print incorrectly overrides package-private method with same name in Ljunit/textui/ResultPrinter; 
05-04 15:16:57.840: W/dalvikvm(5683): method Landroid/test/InstrumentationTestRunner$StringResultPrinter;.print incorrectly overrides package-private method with same name in Ljunit/textui/ResultPrinter; 
05-04 15:16:57.990: W/ActivityManager(31826): Crash of app com.tvcloud running instrumentation ComponentInfo{com.cloud.test.test/android.test.InstrumentationTestRunner}    


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

给我一个 F 码, 帮你解决. 哈哈

你是小米公司的?

你可以贴日志,我们一条条来看。我做盒子的。

#1 楼 @seveniruby @lihuazhang 我不是小米的啊,我们只是给安卓的电视盒子做应用的,不只是小米盒子,还有各种不同品牌的盒子
@lihuazhang 3q 我周日上班了就去拷日志。
ps:五一节日快乐

#4 楼 @shixue33 我还在加班,你是啥应用,我们盒子估计也有

#4 楼 @shixue33 我很好奇你是什么公司的~

@lihuazhang 已贴出日志,谢谢~

@lihuazhang 唔~球出现·~~~

自己加了 junit 的 jar 到测试 apk?

剪烛 #11 · 2014年05月05日 Author

@bobotiger 没有啊,全部按照之前测试安卓手机的步骤。导入的只有 Robotium 的 jar 包

剪烛 #12 · 2014年05月06日 Author

#5 楼 @lihuazhang 求粗线~

#12 楼 @shixue33 解决没? 我也不太懂。

应该贴测试代码的。。= =

是不是这个问题, 你最好贴代码

05-04 15:08:13.220: W/dalvikvm(3687): method Landroid/test/InstrumentationTestRunner$StringResultPrinter;.print incorrectly overrides package-private method with same name in Ljunit/textui/ResultPrinter; 
剪烛 #16 · 2014年05月15日 Author

@seveniruby @lihuazhang @bobotiger @monkey
可能基本已经搞清楚什么原因了,谢谢各位关注
小米盒子是这样的,每次程序退出后,会杀掉这个程序的进程,可能是考虑到资源的利用,但是 Instrument 和被测程序在同一个进程,所以一个 test 方法执行完毕执行 teardown 方法中的 solo.finishOpenedActivities() 方法后,系统会将被测程序的进程给干掉
通过 adb shell top 分别打印正常运行程序和手动退出程序后的所有进程,对比,确实后者已经找不到被测程序的进程了。
现在解决方法可能只能注释掉 solo.finishOpenedActivities(),然后在 PC 上写一个脚本,单独运行每一个测试方法。每执行完一个方法后,
再 pull 测试结果回 PC,最后再分析所有结果生成报告

#16 楼 @shixue33 这是 android 的机制, 有个办法, 你可以在单独开个线程, 执行一些特殊操作让系统认为当前的进程还不能被清理.

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册