APP测试(三)

稳定性测试之Monkey简介(一)

Posted by MiaoMiaoMiao on October 3, 2020

稳定性测试之Monkey简介(一)

在未来的几篇文章中,我将给大家介绍移动端稳定性测试之Monkey的测试,让大家明白并使用这个工具; Monkey是一个在模拟器或设备上运行的程序(命令行工具),可以生成用户事件的伪随机流,例如clicks,touches ,手势,或者系统等级事件.你可以使用Monkey以随机且可重复的方式对你正在开发的应用程序进行稳定性测试;

总览

Monkey总共包括许多选项,但是主要分为四个类别:

  • 基本配置选项,例如设置要尝试的事件数;
  • 操作约束,例如讲测试限制为单个包;
  • 事件类型和频率;
  • 调试选项

当Monkey运行时,它会生成事件并将它们发送到系统.它可以监视被测系统,并查找三种特殊情况:

  • 如果你已将Monkey限制为在一个或多个特定包中运行,则会监视尝试导航到任何其他包并阻止它们.
  • 如果你的应用崩溃或收到任何类型的未处理异常,Monkey将停止并报告错误.
  • 如果您的应用生成一个没有响应错误的应用程序,Monkey将停止并报告错误.

根据您选择的详细级别,您还将看到有关Monkey的进度和正在生成的事件的报告。

Monkey的基本用法

您可以使用开发计算机上的命令行或脚本启动Monkey。由于Monkey在模拟器/设备环境中运行,因此必须从该环境中的shell启动它。您可以通过将adb shell添加到每个命令,或者直接输入shell并输入Monkey命令来完成此操作。

基本语法

$ adb shell monkey [options] <event-count>

如果没有指定选项,Monkey将以安静(非详细)模式启动,并将事件发送到目标上安装的任何(和所有)软件包。这是一个更典型的命令行,它将启动您的应用程序并向其发送500个伪随机事件

$ adb shell monkey -p your.package.name -v 500

要点

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

Monkey缺点

  • 不支持条件判断
  • 不支持读取待测界面的信息来执行验证操作.
  • 不提供截屏功能,因此测试很难找到问题复现的场景
  • 无法进行控件识别,对事件流控制能力很微弱
  • 执行过程中容易误点工具栏导致Wi-Fi关闭,影响测试效果
  • 无法自动解锁

Monkey测试结果分析

正常情况

顺利执行完成, 在log的最后, 会打印出当前执行事件的次数和所花费的时间; // Monkey finished 代表执行完成.

异常情况

异常结束;

** Monkey aborted due to error
:Sending rotation degree=0,persist=false
:Dropped:keys=3 pointers=8 trackballs=0 flips=0 rotations=0 ## Network stats: elapsed time=3300ms (0ms mobile, 0ms wifi, 3300ms not connected)
System appears to have crashed at event 1744 of 10000 using seed 1435753466327
  • ANR输出异常格式 "//NOT RESPONDING:"+processName+"pid"+")")
  • Crash输出异常格式 "//CRASH:"+processName++"pid"+")")"//Short Msg:"+shortMsg"//Long Msg:"+longMsg"//Build Label: "+Build.FINGERPRINT"//Build Changelist: "Build.VERSION.INCREMENTAL"Build Time: "+Build.TIME"//"+stackTrace.replace("\n","\n//")

Monkey日志组成部分

log按照顺序输出:

  • 测试命令信息 (随机种子、运行次数、可运行的应用列表、各事件百分比)
  • 伪随机流(11大事件流)
  • 异常信息(ANR、CRASH、OOM等异常)
  • 测试结果信息(完成时间、旋转情况、按键情况、网络状态)
  • 找到monkey里面的哪个地方出错;
  • 查看Monkey里面出错前的一些事件动作,并手动执行该动作;
  • 若以上找不出,可以根据使用之前执行的monkey命令再执行一遍,注意seed值要一样.
  • ANR问题:在日志中搜索“ANR”;
  • 崩溃问题:在日志搜索”Exception” Force Close

设置黑白名单(如何跑多个apk)

黑名单设置

(黑名单:执行除了黑名单中以外的apk;)

  1. 创建一个名称为blacklist.txt的文档,在文件中输入应用程序的包名,如abc应用,则在文件中输入com.Android.abc;如果有多个应用不想被执行,则在文件中添加多个包名,用回车分隔开;
  2. blacklist.txt的文件导入到手机/data目录下
  3. 执行monkey测试使用--pkg-blacklisg-file 参数再加上blacklist文件的存储路径;

白名单的设置

(白名单:只执行在白名单中的apk; ) 配置和黑名单一样;只是取名为whitelist.txt

实践

monkey –pkg-whitelist-file /data/whitelist.txt -c <options> -s <seed> <限制语句> --throttle <milliseconds> -v 执行次数 > ./whitelist_test.txt //执行白名单的应用

monkey –pkg-blacklist-file /data/blacklist.txt -c <options> -s <seed> <限制语句> --throttle <milliseconds> -v 执行次数> ./blacklist_test.txt //执行黑名单以外的应用

Monkey的测试思路

  1. 单个apk的验收测试时,使用单一apk且不忽略异常的命令执行;
  2. 单个apk的解决问题的测试时,使用单一apk且忽略异常的命令执行.
  3. 单个apk的应用程序的压力/健壮测试时,主要缩短monkey测试中事件与事件之间的延迟时间,验证在快速的事件响应的过程中,程序是否能正常运行.一般都使用(500ms的延迟事件)
  4. 在进行apk的集合测试(测试对象为多个APP)时,对于高频率使用的apk、长时间使用的apk都要包含在执行的应用程序中间。

关闭Monkey

  1. ps命令查找进程 adb shell ps |grep monkey返回来的一个数字,即是monkey的进程号
  2. kill命令结束进程 adb shell kill 进程号

bye