马bao国也想学的monkey命令工具

微信搜一搜公众号【窗外红叶】点下关注,关注后回复【资料】有我准备的全套测试自学资料和测试工具哦。

monkey介绍

  • Monkey是Google提供的一个用于稳定性与压力测试的命令行工具。可以运行在模拟器或者实际设备中。它向系统发送发送伪随机的用户事件(如按键、手势、触摸屏等输入),对软件进行稳定性与压力测试。

Monkey路径:

  • Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中存放路径是:/system/framework/mokey.jar
  • Monkey.jar程序时由一名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monk;

Monkey测试原理

  • monkey测试的原理:利用socket通讯的方式来模拟用户的按键输入、触摸屏输入、手势输入等。

Monkey环境变量的配置

Monkey是由adb命令启动,故只要配置adb环境
  • 1)下载Android SDK解压;
  • 2) 将SDK目录下的platform-tools和tools目录配置到系统环境变量中
  • 3)打开cmd窗口,输入adb,有adb帮助信息则配置成功

Monkey常用事件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sKCF2Mm5-1606142752743)(en-resource://database/1937:1)]

Monkey常用参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xvvma5xZ-1606142752761)(en-resource://database/1939:1)]

参数分类
  • 常规类参数
  • 事件类参数
  • 约束类参数
  • 调试类参数

常规类参数

  • 常规类参数包括帮助参数和日志信息参数。帮助参数用于输出Monkey命令使用指导;日志信息参数将日志分为三个级别,级别越高,日志的信息越详细。
    ①帮助类参数
root@android:/ # monkey -h

②日志级别

$ adb shell monkey -v <event-count>

-v:打印出日志信息,每个-v将增加反馈信息的级别。-v越多日志信息越详细,不过目前最多支持3个-v

事件类参数

  • 事件类参数的作用是对随机事件进行调控,从而使其遵照设定运行,如设置各种事件的百分比、设置事件生成所使用的种子值等。频率参数主要限制事件执行的时间间隔。
    ①执行指定脚本
$ adb shell monkey -f <scriptfile> <event-count>


eg:$ adb shell monkey -f /mnt/sdcard/test1

②伪随机数生成种子值(使用 -s命令可以重复执行之前的伪随机操作。本身每次执行伪随机事件操作也会默认生成一个seed值)

$ adb shell monkey -s <seed> <event-count> 
eg:$ adb shell monkey -s 666 100

③设置间隔
如果你希望在每一个指令之间加上固定的间隔时间,可以用–throttle(注意,前面是–)命令。

$ adb shell monkey --throttle <milliseconds>
eg:$ adb shell monkey --throttle 3000  5

–throttle:后面接时间,单位为ms(),表示事件之间的固定延迟(即执行每一个指令间隔的时间),若不接该选项,monkey将不会延迟。

④调整触摸事件百分比

如果你希望调整触摸事件的百分比,记住使用–pct-touch。

$ adb shell monkey --pct-toucheg:
$ adb shell monkey -v -v --pct-touch 100 200

–pct-touch:后面接触摸事件百分比注意:触摸事件不单单是按键,它泛指发生在某一位置的一个down-up事件。
⑤调整手势事件百分比

$ adb shell monkey --pct-motion
eg:$ adb shell monkey -v -v --pct-motion 100 200

⑥调整应用启动事件的百分比

如果你希望调整应用启动事件的百分比,记住使用–pct-app-switch。

$ adb shell monkey --pct-appswtich <percent>

–pct-appswitch:后面接应用启动事件百分比。应用启动事件(即activity launches)俗称打开应用,通过调用startActivity()方法最大限度地开启该package下的所有应用。

⑦调整屏幕旋转事件百分比

$ adb shell monkey --pct-rotation <percent>

–pct-rotation 后面接屏幕旋转事件的比例值。
⑧其他参数设置

约束类参数
①包约束
-p: 后面接一个或多个包名(<allowed-package-name),如果应用需要访问其他包里的Activity,那相关的包也需要在此同时指定。如果不指定任何包,monkey将允许系统启动全部包里的Activity.

$ adb shell monkey -p <allowed-package-name> <event-count>
eg:$ adb shell monkey -p com.tal.kaoyan 500

②activity类约束
如果你希望将monkey限制在一个或几个类别中,使用如下命令:

adb shell monkey -c <main-category> <event-count>

-c: 测试一个或多个类别
以下命令表示运行Intent.CATEGORY_LAUNCHER类别的Activity并发送1000个随机事件。

$ adb shell monkey -c Intent.CATEGORY_LAUNCHER  1000

调试类参数
①应用程序崩溃后继续发送事件
如果你希望monkey在应用程序崩溃后继续发送事件,则需要用到–ignore-crashs命令

$ adb shell monkey --ignore-crashes <event-count>

在设置此选项后,当应用程序崩溃或发生失控异常时,monkey将继续运行直到计数完成。如果不设置此选项,monkey遇到上述崩溃或异常将停止运行。

②超时错误继续发送事件
如果你希望monkey在任何超时错误发生后继续发送事件,则需要用到–ignore-timeouts命令。

$ adb shell monkey --ignore-timeouts

–ignore-timeouts:在设置此选项后,当应用程序发生任何超时错误(如ANR,即Application Not Responding)时,monkey将继续运行直到计数完成。如果不设置此选项,monkey遇到此类超时对话框将停止运行。

③应用程序权限错误发生后继续发送事件

如果你希望monkey在应用程序权限错误发生后继续发送事件,则需要用到–ignore-security-exceptions命令。

$ adb shell monkey --ignore-security-exceptions

–ignore-security-exceptions:在设置此选项后,当应用程序发生任何权限错误(如启动一个需要某些权限的Activity)时,monkey将继续运行直到计数完成。如果不设置此选项,monkey遇到此类权限错误将停止运行。
④其他
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J5xAa1bA-1606142752765)(en-resource://database/1941:1)]

Monkey日志管理分析

Monkey日志管理

日志管理作用
Monkey日志管理是Monkey测试中非常重要的一个环节,通过日志管理分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和解决问题。
monkey日志保存方法

  • 1、保存在PC中
>adb shell monkey [option] <count> >d:\monkey.txt


C:\Users\admin>adb shell monkey -v -v 100 >d:/monkeylog.txt

注意: 先用adb shell 进入安卓系统,再用monkey命令可能会出现文件权限问题

  • 2、保存在手机上
C:\Users\Shuqing>adb shell
monkey -v 100 >/sdcard/monkeylog.log
root@shamu:/ # monkey -v -v -v 100 >/sdcard/monkeylog.log

注意: 如果对应系统没有这个文件,新创建一个文件即可。

  • 3、标准流和错误流分开保存
Monkey [option] <count> 1>/sdcard/monkey.txt 2>/sdcard/error.txt
Monkey日志分析
结果分析搜索关键字
  • 1、无响应问题在日志中搜索“ANR(Application Not Responding)”
  • 2、崩溃问题搜索“CARSH”
  • 3、内存泄露搜索“GC”(需要进一步分析)
  • 4、异常问题搜索“Exception”(NullPointException需要格外重视)
详细说明
  • 1、 ANR问题:在日志中搜索“ANR”(“Application Not Responding"),说明有bug,出现ANR,一般是主线程的响应超过5秒,或者BroadcastReceiver没有在10秒内作出响应。这个就是一个比较严重的缺陷。把耗时的操作另起线程来处理就可以了。
  • 2、 崩溃问题:在日志中搜索“Exception”
详细分析Monkey日志
  • log文件最开始都会显示Monkey执行的seed值,执行测试和测试的包名。
  • 查看Monkey测试是否出现了问题,方法如上述。
  • 查看log中第一个Switch,主要查看Monkey执行的是哪一个Activity,如果有问题,可以在该Activity中发现问题所在。
常见问题的具体分析
  • 1、Null指针异常,空指针异常主要是有NullPointerException异常提示,在Monkey测试过程中,该信息一般记录在plog.log (locat中也有该信息)中。
  • 2、debug异常,debug异常主要是由于应用程序本身的错误导致的异常。在Monkey测试过程中,该信息同样记录在plog.log (locat中也有该信息)中。
  • 3、低内存异常,低内存异常一般情况下,主要表现在出现OutOfMemoryError异常或者提示Out of memory,其后果同样表现为抛出OutOfMemoryError异常或者是通过kill process 来杀掉部分进程以释放内存空间,当然如果被kill点关键的进程的话,也就可能导致部分应用会自动的退出。
  • 4、 操作无响应异常,操作无响应的问题,主要表现在Monkey运行过程中,出现某功能无响应,提示是否“强制关闭“或“等待“。
其他异常
  • A、Restart System异常(系统重新启动),即log信息的最后几行会看到Restart System的打印信息,说明手机被自动的重启或断掉,有几个方面的原因:

1、运行过程中,存在异常手机被自动重启
2、手机在运行过程中,进入设置中的恢复出场设置,导致手机重启
3、其他原因,如果手机后盖移动等

  • B、RuntimeException等异常,同样的会在plog.log中可以看到相应的打印信息, java.lang.RuntimeException该问题多出现在操作无响应之后,或者是某应用的服务无法启动或连接时,需要具体问题具体的分析
  • C、StaleDataException、readException等异常, 在plog.log中可以看到相应的打印信息,也会有相应的信息: android.database.StaleDataException,该信息说明android的数据库操作出现异常, 需要具体问题具体的分析
  • D、IllegalArgumentException等异常,多少情况下为说明向函数传递了一个不正确或不合法的参数需要具体问题具体的分析
说明几点:
  • 1、log信息的分析,希望在bug信息的简述中能够明确说明清楚出现的是什么异常,具体的log信息要单独添加到详细信息描述中,方便相关人员定位和查看。
  • 2、buy的提交,对于Monkey测试出现的问题:a、首先要求分析log信息b、再次要确认该bug是否已经提交?已经提交的bug和新运行出来的问题是否一致?c、如果不一致的话,是否属于同一问题,如空指针异常,是的话就把该问题的log信息一起注释到bug信息中,并添加所有的log信息d、如果不一致的,也不属于同一问题的话,可以提交新的bug
  • 3、在java编程中,一般的异常都会抛出xxx Exception的信息,可以跟进xxx进行相关的判断和分析,具体的异常则需要具体问题具体分析。
常见java异常
  • 算术异常类:ArithmeticExecption
  • 空指针异常类:NullPointerException
  • 类型强制转换异常:ClassCastException
  • 数组负下标异常:NegativeArrayException
  • 数组下标越界异常:ArrayIndexOutOfBoundsException
  • 违背安全原则异常:SecturityException
  • 文件已结束异常:EOFException
  • 文件未找到异常:FileNotFoundException
  • 字符串转换为数字异常:NumberFormatException
  • 操作数据库异常:SQLException
  • 输入输出异常:IOException
  • 违法访问错误:IllegalAccessError
  • 内存不足错误:OutOfMemoryError
  • 堆栈溢出错误:StackOverflowError

微信搜一搜公众号【窗外红叶】点下关注,关注后回复【资料】有我准备的全套测试自学资料和测试工具哦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值