Monkey 介绍及使用

一、介绍

        monkey是Android中的一个命令行工具,运行在模拟器里或实际设备中。通过向系统发送伪随机的用户事件,例如:按键输入、触摸屏输入、手势输入等,实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性,健壮性的快速有效的方法,就是利用工具模拟人的触屏和输入等操作,在短时间内对手机APP疯狂的进行大量的疯狂的乱点,乱按,乱输入的操作,疯狂地去“折腾”这个APP。


二、测试流程详解

        通过名为 monkey 的Shell脚本去启动Monkey.jar程序,在指定的APP上模拟用户点击,滑动,输入等操作以极快的速度来对设备程序进行压力测试,检测程序是否会发生异常,然后通过日志进行排错。
        基本语法如下:

#monkey的基本语法如下:这是对整台机器的测试;
adb shell monkey [options]

#针对某个应用的monkey测试, 对淘宝点击500次
adb shell monkey -p com.taobao.taobao 500

        常用命令:       

adb devices  # 查看链接的设备

adb shell monkey -p pkgname            对指定包名进行测试
adb shell monkey --throttle milliseconds         指定事件之间的时间间隔,单位是毫秒
adb shell monkey -s seed         伪随机数生成器的seed值,如果用相同的seed值再次运行monkey,将生成相同的事件序列
adb shell monkey -v [-v -v ]         指定日志级别
adb shell monkey --pct-touch        指定触摸事件的百分比
adb shell monkey --pct-motion        指定动作事件的百分比
adb shell monkey --pct-trackball        指定轨迹球事件百分比
adb shell monkey --pct-nav        指定基本导航事件百分比
adb shell monkey --pct-majornav        设定主要导航事件百分比,兼容中间键,返回键,菜单键
adb shell monkey --pct-syskeys        设定系统事件百分比,比如HOME、BACK,拨号及音量调节等。
adb shell monkey --pct-appswitch        设定启动不同应用程序的事件百分比
adb shell monkey --pct-anyevent        设定不常用事件百分比
adb shell monkey --ignore-crashes        忽略奔溃和异常事件
adb shell monkey --ignore-timeouts        忽略超市事件
adb shell monkey --pkg-blacklist-file        设置不需要进行测试的黑名单应用
adb shell monkey --pkg-whitelist-file        设置需要测试的白名单应用;对白名单的应用都进行测试;

adb shell logcat>e:\\log.txt      抓取日志

三、结果分析

        Monkey测试中主要的异常和错误:
        1、Crash:表示被测试应用异常停止或退出。
        2、ANR:application no response ;表示在5秒内没有响应输入的事件(例如:按键按下、屏幕触摸等)
        3、Error或Exception:表示应用程序在系统运行过程中遇到了未知错误或异常。
        4、aborted:表示应用程序没有正常启动或无法正常启动,monkey测试被迫中止。
        monkey测试建议:
        1、 尽量关闭所有网络开关(WiFi及数据连接),以及莫名消耗流量,除非测试过程必须要求互联网。
        2、开启安全设置下的未知来源。
        3、手机连接电源充电,模拟器不在此讨论范围。
        4、测试前运行一边手机上方带有的首次提示的说明,如输入法,文件窗口,apk提示语等。
        5、monkey只是测试过程的辅助手段,不必过分依赖。应该将精力放在更需要人为参与的设计高效用例、设计有效用户场景、性能测试、接口测试、自动化测试等重要工作上。

        一般的分析步骤:
        1、先找到出现错误的位置
        2、查看出现错误之前2个switch之间的activity
        3、手动执行事件,复现问题
        4、若以上步骤还不能找出,产生错误时,有会seed值,输入相同的seed值,重新按照之前命令跑monkey

        logcat日志级别

扫描二维码关注公众号,回复: 14713189 查看本文章

        Verbose:显示所有日志消息(默认值)。
        Debug:显示仅在开发期间有用的调试日志消息,以及此列表中较低的消息级别。
        Info:显示常规使用情况的预期日志消息,以及此列表中较低的消息级别。
        Warn:显示尚不是错误的潜在问题,以及此列表中较低的消息级别。
        Error:显示已经引发错误的问题,以及此列表中较低的消息级别。
        Assert:显示开发者预计绝不会发生的问题。

        logcat命令语法:adb logcat [option] [filterspecs]
        

#打印默认日志数据
adb logcat
#需要打印日志详细时间的简单数据
adb logcat -v time
#需要打印级别为Error的信息
adb logcat *:E
#需要打印时间和级别是Error的信息
adb logcat -v time *:E

四、代码示例

import os

content=os.system('adb shell monkey -p com.taobao.taobao --throttle 10 -s 12345 200').read()


if 'CRASH' in content or 'crashed' in content:
    print('应用程序运行奔溃!')
elif 'ANR' in content or 'NOT RESPONDING' in content:
    print('应用程序运行时卡壳!')
elif 'Execption' in content or 'exception' in content or 'error' in content:
    print('程序运行出错!')
elif 'aborted' in content:
    print('应用程序未正常运行!')
else:
    print('正常运行!')    

猜你喜欢

转载自blog.csdn.net/guanrongl/article/details/124952767