新手区 monkey 测试请教

cissysnail · 2015年03月31日 · 最后由 恒温 回复于 2015年04月01日 · 2359 次阅读

楼主是移动应用测试新进人员,实际上目前只有一条腿跨进门槛,因为下个月才正式入职。目前在自己学习,找些应用测着试试
关于 monkey 测试有些疑问,请有经验的大神指教
1)monkey 测试在项目的什么阶段测试发挥的作用最大?

我个人简单的认为 monkey 测试最大的作用就是可以帮助我们实现各种乱点,不论是在应用内还是应用间,各种控件点击是否能够实现有效跳转,所以我觉得 monkey 测试是不是应该放在项目早期,这样可以替代手工测试暴露出比较多不能实现有效跳转或切换的问题,如果在版本相对稳定之后再做这个测试,控件点击这些操作是不是都已经被基本功能测试覆盖了,monkey 就发挥不了太大作用 (当然是可以一直不断测试来发现问题,保证稳定性)。但是在网上又找到一些说法提到 monkey 测试不适合在早期测试,因为会产生过多的 crash 是影响定位什么的,所以有点疑惑了。

有项目经验的同学,可否分享下,你们项目中是在什么阶段使用 monkey 测试的效果最好?

2)monkey 测试的有效性?

一个应用,在有用户的状态,monkey 测试是不是应该要尽可能多的 activity 呢?

我测试了两个应用,一个上架时间比较短,一个上架时间比较长了,都按照下面的几条命令进行测试,完成后,对报告进行分析,均没有 crash,没有 ANR,测试覆盖到的应用的 activity 也不是那么多

adb shell monkey -p **** --throttle 400 --pct-touch 35 --pct-motion 20 --pct-nav 5 --pct-majornav 5 --pct-pinchzoom 10 --pct-appswitch 20 --pct-anyevent 5 -s 4 -vvv 50000 >d:\android\monkey_user1.log

adb shell monkey -p **** -p **** -p ***** --throttle 400 --pct-touch 50 --pct-motion 30 --pct-nav 0 --pct-majornav 0 --pct-pinchzoom 20 --pct-appswitch 0 --pct-anyevent 0 -s 5 -vvv 50000 >d:\android\monkey_user2.log

adb shell monkey -p **** --throttle 400 --pct-touch 60 --pct-motion 40 --pct-nav 0 --pct-majornav 0 --pct-pinchzoom 0 --pct-appswitch 0 --pct-anyevent 0 -s 6 -vvv 50000 >d:\android\monkey_user3.log

adb shell monkey -p **** --throttle 400 -s 7 -vvv 50000 >d:\android\monkey_user4.log

测试环境:锤子手机,android4.4.2,没有 root,usb 连接
我想请问下:
1.你们测试的项目中用 monkey 测试到 crash,ANR 的概率高不高,都是什么原因导致这些问题的?当用 monkey 测试到这些问题时,怎么给开发描述这个问题,直接丢 log 给开发,还是自己要做一些进一步的定位?

2.我测试到的 activity 覆盖率真心不高,因为它很容易会进入一些像说明文档一样的界面,一旦进入这种界面貌似跳出来很难,又没啥东西可以点,大大降低 测试有效性,大家测试时是否也有这样的问题?都怎么解决?还是我的命令写的有问题

3.关于复现,我测试的时候,上面第二条命令在三个应用之间测试,主要测试偏重 appswith 这个参数,第一次测试的时候测试跳转到其中一个 app 时出现了 crash,再跑一遍的时候时候复现不了了,命令,seed 值,都一样,就是复现不了。是前置条件的原因吗?那前置条件包括哪些呢?我测试之前都是把所有的 app 都关掉了,手机也是网络等正常开启,重新这样操作之后还是不能复现

  1. log 除了关注被测应用相关的 crash,anr,reject,和其他的切换的时候其他应用或者系统应用出现的 crash,anr,reject 是否要管?要管的话怎么分析?
共收到 15 条回复 时间 点赞
  • 发帖前先把默认头像改了
  • 代码请贴代码并使用代码块!
  1. monkey 主要用处是快速测试稳定性。项目初期会有很多 crash/anr 很正常(你测的都是上架了的应用,crash 和 anr 当然很少),而且初期主要注重功能是否正确实现,所以用 monkey 不多(先能用,后面再看能不能稳定地用。连基本功能都没做好,稳定性再好也没意义)。 当然也不是说项目初期就肯定不跑 monkey,主要取决于项目具体情况。
  2. 覆盖率这东西和 monkey 没啥关系啊。你不可能让随机事件能有很好的覆盖率。覆盖率是单元测试/功能测试做的事。
  3. 你这个情况我估计是 anr,有可能是 monkey 跑得太快系统反应不过来。这是性能引起的,seed 值一样只能保证随机事件流是一样的,但保证不了跑的过程中性能表现都是一样。
  4. 我不清楚你们是什么应用,但我用 monkey 一般比较少切换应用,主要是因为我主要关注我自己的被测应用(如果我的应用要调用其他应用那是另一回事,那样的话还是要关注一下被调用的应用,但一般不会用 monkey 来做),系统应用的 crash 如果和我的应用本身无关,那我没必要关注这个(你关注了也改变不了什么)。

1)monkey 测试在项目的什么阶段测试发挥的作用最大?
一般来说,在集成测试中,测试 app 的稳定性。

1.你们测试的项目中用 monkey 测试到 crash,ANR 的概率高不高,都是什么原因导致这些问题的?当用 monkey 测试到这些问题时,怎么给开发描述
这个问题,直接丢 log 给开发,还是自己要做一些进一步的定位?
因为放在集成测试,所以本身 crash,ANR 不高;具体需要把日志给 RD 看,有源码的话就可以定位到哪一行

2.我测试到的 activity 覆盖率真心不高,因为它很容易会进入一些像说明文档一样的界面,一旦进入这种界面貌似跳出来很难,又没啥东西可以点,大大降低 测试有效性,大家测试时是否也有这样的问题?都怎么解决?还是我的命令写的有问题
你可以让 RD 把这些说明文档的入口封了

3.关于复现,我测试的时候,上面第二条命令在三个应用之间测试,主要测试偏重 appswith 这个参数,第一次测试的时候测试跳转到其中一个 app 时
出现了 crash,再跑一遍的时候时候复现不了了,命令,seed 值,都一样,就是复现不了。是前置条件的原因吗?那前置条件包括哪些呢?我测试
之前都是把所有的 app 都关掉了,手机也是网络等正常开启,重新这样操作之后还是不能复现
我觉得本身复现概率就很低吧,如果很容易复现,手工测试也就发现了

  1. log 除了关注被测应用相关的 crash,anr,reject,和其他的切换的时候其他应用或者系统应用出现的 crash,anr,reject 是否要管?要管的话怎么分析? 想不出你测一个 app 为啥还要切换

@chenhengjie123 @eurekasaber 感谢两位的回答 关于测试的时间和覆盖率的问题,我想我还要进一步到项目中去实践
另外还想细问一下 1)monkey 中 crash 和 anr 产生的原因一般有哪些?
2)如何跟开发反馈问题?从 log 上看,因为我只测到过 crash 和 reject ,crash 的时候貌似 log 里只有 crash:+ 包名,就这些信息如何去定位到代码的某行

#4 楼 @cissysnail crash 和 anr 产生原因都来自于应用代码本身。crash 有可能是出现了某个非未处理的异常,anr 是某个部分占用 ui 线程太久了或性能有问题。

别只看 monkey 的 log,logcat 的 log 才能帮你定位到具体代码。必要时甚至需要 trace。

#4 楼 @cissysnail 如楼上,日志还包括:
adb logcat -v time >>d:\logcat.log &

@chenhengjie123 好的 感谢 需继续实践学习

#3 楼 @eurekasaber monkey 太没有规律了, google 的本意是用来做界面的压力测试和健壮性测试. 他可以发出很多的 event 来验证 activity 的消息处理机制. 也可以验证 app 自身的逻辑处理是否健壮. 最好是借助其他的方法进入各个界面, 进行自定义的控制, 然后再调用 monkey. 这样可以更好的控制你的 app 跳转逻辑. 比如不进入某个界面, 不点击某个按钮之类的.

1.你们测试的项目中用 monkey 测试到 crash,ANR 的概率高不高,都是什么原因导致这些问题的?当用 monkey 测试到这些问题时,怎么给开发描述

Monkey:一般高不高要看产品。本身 monkey 就是一个 random 的操作工具,原因导致有很多,其中线程执行超过 5s 以及 NPE 是最多的。描述的话就是 Monkey crash or ANR +Log

这个问题,直接丢 log 给开发,还是自己要做一些进一步的定位?

Monkey:要定位

2.我测试到的 activity 覆盖率真心不高,因为它很容易会进入一些像说明文档一样的界面,一旦进入这种界面貌似跳出来很难,又没啥东西可以点,大大降低 测试有效性,大家测试时是否也有这样的问题?都怎么解决?还是我的命令写的有问题

Monkey:有办法解决,你可以做一个插件,也就是添加一个自己的判断,获取所有的 Activity 之后,进入一个然后堆栈中删除一个,然后一边再执行 monkey

3.关于复现,我测试的时候,上面第二条命令在三个应用之间测试,主要测试偏重 appswith 这个参数,第一次测试的时候测试跳转到其中一个 app 时
出现了 crash,再跑一遍的时候时候复现不了了,命令,seed 值,都一样,就是复现不了。是前置条件的原因吗?那前置条件包括哪些呢?我测试
之前都是把所有的 app 都关掉了,手机也是网络等正常开启,重新这样操作之后还是不能复现

Monkey:由于 random 本身就是存在误差的,包括延迟,网络等。所以尽量还是通过代码来定位问题。以及反推重现步骤

log 除了关注被测应用相关的 crash,anr,reject,和其他的切换的时候其他应用或者系统应用出现的 crash,anr,reject 是否要管?要管的话怎么分析?

Monkey:reject 一般不会再报告中体现

同学,大家都这么热心回答你了,你也应该好好修改下你的帖子,让大家看上去不是很累啊。 @cissysnail
monkey 测试的精髓在于它会告诉你,啥应用都有可能出现 anr 和 crash,关键就在于出现异常时候的分析,这种场景是否是用户不能到达的,然后评估一下,是否要修。另外一个 monkey 的好处可以很快的验收其他人提测的应用。

感谢各位如此热情滴回复 从未在坛子里有过这么多干货回复 谢谢
@monkey 我测到过一次被测应用丢出来的 reject 诶 ,虽然只有那么一次 ,那次是那个软件的内测版,你们实际项目很少有这种情况吗?
@lihuazhang 因为我现在还没入职正式做这个 实在没什么实践的经验 各位大神提到的方法和思考的角度还要在我后续的工作中去实践才能得到我自己的整理总结 所以修改整理这个活要不就留个作业吧 我尽量可以早点完成 再次感谢

我想我误会意思了,大概修改了下排版

#8 楼 @seveniruby 借助方法进入各个界面?能不能详细说一下?

#13 楼 @cissysnail 给你布置一个作业吧

  • 学习下论坛的 markdown,然后把排版在弄好看点。
  • monkey 的常用参数用用看,然后把 monkey 生成的报告比如 anr 啊,tombstone 啊分析下,写篇文章出来。叫做 monkey 实战!
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册