Monkey测试结果分析

Monkey测试结果分析

什么是monkey

  Monkey 测试是 Android 自动化测试的手段之一,它通过模拟用户的按键输入、触摸屏输入等,测试设备多长时间出现异常。Monkey 是一个命令行工具,可以运行在模拟器或实际设备中,通过向系统发送伪随机的用户事件流,实现对全系统或某个应用程序进行压力测试。

操作

  真机连接电脑,启动cmd执行命令:

  (如果是复制下面的命令,容易出错,命令是不能换行的。可以先复制到QQ对话框,修改后复制到adb中运行)

adb devices  //查看是否连接正常

adb shell monkey -p com.komect.community -s 3156  --hprof 
--pct-touch 18
--pct-anyevent 0
--pct-motion 18
--pct-trackball 18
--pct-majornav 10
--pct-nav 0
--pct-syskeys 18
--pct-flip 0
--pct-pinchzoom 0
--pct-appswitch 18
-v -v -v --throttle 800 250000 > D:/monkey_test.log

monkey测试的停止条件

  Monkey Test执行过程中在下列三种情况下会自动停止:

  1、如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。

  2、如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。

  3、如果应用程序产生了应用程序不响应(applicationnot responding)的错误,Monkey将会停止并报错。

  通过多次并且不同设定下的Monkey测试才算它是一个稳定性足够的程序。

  强制停止monkey测试的方法:

  • adb shell
  • ps | grep monkey
  • kill pid (返回的第一个数字)

 执行monkey测试的关注点

   1monkey只支持activityApp项目工程的manifest.xml中可以看到所有的activityservice

  2、在跑的过程中,绝对不要使用两个不同版本的sdkadb。绝对不要去使用阿德巴deivceskillserver。如果使用,会将服务终止。手机的monkey不会停止,但是log就没有了

  3monkey本身虽然是一个random压力,性能测试工具,但是我们在做测试之前也需要做一些准备。

  4monkey testlogcat是同步的。一般来讲,跑monkey的时间,RC版本之后,relaease之前,每天都需要去跑,一般一个应用上线前25w次。0 null point exception

 初步分析结果

  Monkey测试出现错误后,一般的差错步骤为以下几步:

  (1) 找到是monkey里面的哪个地方出错

  (2) 查看Monkey里面出错前的一些事件动作,并手动执行该动作

  (3) 若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样

  一般的测试结果分析:

  搜索关键词:ANRExceptionNullErrorcrashFatal

  (1) ANR问题:在日志中搜索“ANR

  ANR=Application Not Responding
  在Android上,如果你的应用程序有一段时间响应不够灵敏(5秒内没有输入响应事件),系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANRApplication Not Responding)对话框。

  (2) 崩溃问题:在日志中搜索“Exception

  Null 指针异常:空指针异常主要是有 NullPointerException 异常提示
  debug 异常:出现的是 IllegalStateException 异常
  低内存异常:出现的是 OutOfMemoryError 异常
  操作无响应异常:TimerOut(KeyDispatchingTimedOut 提示)
  RuntimeException 异常(操作无响应或应用的服务无法启动或连接)
  StaleDataException/readException 异常(android 数据库出现异常)
  IllegalArgumentException 异常(向函数传递了一个不正确或不合法的参数)

详细分析monkey日志

  将执行Monkey生成的log,从手机中导出并打开查看该log;在log的最开始都会显示Monkey执行的seed值、执行次数和测试的包名。

  首先我们需要查看Monkey测试中是否出现了ANR或者异常,具体方法如上述。

  然后我们要分析log中的具体信息,方法如下:

  查看log中第一个Switch,主要是查看Monkey执行的是那一个Activity,譬如下面的log中,执行的是com.tencent.smtt.SplashActivity,在下一个swtich之间的,如果出现了崩溃或其他异常,可以在该Activity中查找问题的所在。

  :Switch:#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10000000;component=com.tencent.smtt/.SplashActivity;end

    // Allowing start of Intent {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]cmp=com.tencent.smtt/.SplashActivity } in package com.tencent.smtt

  在下面的log中,Sending Pointer ACTION_DOWNSending Pointer ACTION_UP代表当前执行了一个单击的操作;

  Sleeping for 500 milliseconds这句log是执行Monkey测试时,throttle设定的间隔时间,每出现一次,就代表一个事件。

  SendKey(ACTION_DOWN) //KEYCODE_DPAD_DOWN   代表当前执行了一个点击下导航键的操作;

  Sending Pointer ACTION_MOVE     代表当前执行了一个滑动界面的操作。

  :Sending Pointer ACTION_DOWN x=47.0 y=438.0

  :Sending Pointer ACTION_UP x=47.0 y=438.0

  Sleeping for 500 milliseconds

  :SendKey (ACTION_DOWN): 20   //KEYCODE_DPAD_DOWN

  :SendKey (ACTION_UP): 20   //KEYCODE_DPAD_DOWN

  Sleeping for 500 milliseconds

  :Sending Pointer ACTION_MOVE x=-2.0 y=3.0

  :Sending Pointer ACTION_MOVE x=4.0 y=-3.0

  :Sending Pointer ACTION_MOVE x=-5.0 y=-3.0

  :Sending Pointer ACTION_MOVE x=3.0 y=4.0

  :Sending Pointer ACTION_MOVE x=-4.0 y=1.0

  :Sending Pointer ACTION_MOVE x=-1.0 y=-1.0

  :Sending Pointer ACTION_MOVE x=-2.0 y=-4.0

  如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间;// Monkey finished代表执行完成。Monkey执行中断,在log的最后也能查看到当前已执行的次数。Monkey执行完成的log具体如下:

  Events injected: 6000

  :Dropped: keys=0 pointers=9 trackballs=0 flips=0

  ## Network stats: elapsed time=808384ms (0ms mobile, 808384ms wifi, 0msnot connected)

  // Monkey finished

 

转载于:https://www.cnblogs.com/yuntimer/p/10779617.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值