monkey日志分析

  Monkey是Android中的一个命令行工具,可以在Android模拟器或手机设备中运行。通过向Android系统发送伪随机用户事件流(如屏幕的点击、滑动和系统按键操作等),实现对正在开发的Android App进行压力测试。

  monkey随机测试命令示例:

  (1) 在 手机中执行,并保存日志

    adb shell 进入系统
    monkey -p com.baidu.BaiduMap --ignore-crashes --ignore-timeouts --ignore-native-crashes --pct-touch 40 --pct-syskeys 30 --pct-trackball 30 -s 1 -v -v -v --throttle 200 1000 2> /sdcard/error.txt 1> /sdcard/info.txt 

 

  (2)在dos窗口执行并把日志打印在DOS窗口
    adb shell monkey -p com.baidu.BaiduMap --ignore-crashes --ignore-timeouts --ignore-native-crashes --pct-touch 40 --pct-syskeys 30 --pct-trackball 30 -s 1 -v -v -v --throttle 200 1000

  那么monkey随机测试产生的日志该如何进行分析呢?

 

 

 

1、日志开头、结尾:
  (1)显示本次测试seed值,执行次数,测试package包

  (2)如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间;

    // Monkey finished 代表执行完成。
  (3)如果Monkey执行中断,在log的最后也能查看到当前已执行的次数。


2、日志内容分析

  一般测试结果分析--搜索关键字:
    程序无响应,ANR问题:在日志中搜索“ANR”
    崩溃问题:在日志中搜索“CRASH”
    其他问题:在日志中搜索”Exception”


3、详细分析monkey日志

  (1)Switch:查看log中的Switch,主要是查看Monkey执行的是那一个Activity,两个swtich之间如
果出现了崩溃或其他异常,可以在该Activity中查找问题的所在。

  (2)0Sleeping:Sleeping for 300 milliseconds这是执行Monkey测试时,throttle设定的间隔时
间,每出现一次,就代表一个事件。


4、重现问题

  (1)Monkey测试出现错误后,一般的查错步骤为以下几步:
    找到是monkey里面的哪个地方出错
    查看Monkey里面出错前的一些事件动作,并手动执行该动作
    若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样

  (2)一般 0 ANR 、0 CRASH是测试标准。

5、举例

  首先我们需要查看Monkey测试中是否出现了ANR或者异常,具体方法如上述。将执行Monkey生成 的log,从手机中导出并打开查看该log;在log的最开始都会显示Monkey执行的seed值、执行次数和测试的包名。具体方法如上述。

  然后我们要分析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=0x10001100;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_DOWN和Sending Pointer ACTION_UP代表当前执行了一个单击的操作;
    Sleeping for 300 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 300 milliseconds
  :SendKey (ACTION_DOWN): 20 //KEYCODE_DPAD_DOWN
  :SendKey (ACTION_UP): 20 //KEYCODE_DPAD_DOWN
  Sleeping for 300 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具体如下:
    Events injected: 3000
    :Dropped: keys=0 pointers=9 trackballs=0 flips=0
    ## Network stats: elapsed time=458384ms (0ms mobile, 458384ms wifi, 0msnot
    connected)
    // Monkey finished

  monkey在手机APP自动化测试中是一个非常重要的工具,要学会使用并会分析日志。

posted on 2020-08-14 16:48  胡萝卜仙生  阅读(354)  评论(0)    收藏  举报