安卓压测工具Monkey

311 阅读7分钟

Monkey是Android中的命令行工具,对app的稳定性和健壮性进行测试。 适用情况:ANR和CRASH异常情况,低概率很难复现的异常; 适用测试类型:
1、盲测:忽略功能和业务逻辑进行随意的测试;
2、压力测试:通过长时间的高频操作,测试app在测试机上的性能(需要其他性能工具辅助,如jmeter)
3、冒烟测试:在进行功能测试之前,通过monkey测试app的基本可用功能

环境配置

1、JDK安装配置

JDK是Java语言的软件开发工具包,主要用于移动设备,嵌入式设备上的java应用程序。 下载地址:www.oracle.com/cn/java/tec…
根据所安装的操作系统,选择对应的安装包,这里选择的是macOS 在这里插入图片描述

根据提示一步步点即可安装完成
很多开发工具都需要到安装JDK,建议安装前的先在终端输入“javac -version”命令,若弹出版本信息(如下)则说明之前已安装了。如无则执行以上安装,成功后在输入该命令 在这里插入图片描述

2、Android Studio开发环境安装

下载地址:developer.android.google.cn/studio(网盘工具… 下载完安装包后,根据提示一步步点击安装,如下 选择默认项,点击OK

在这里插入图片描述 随意,两项都可以,咨询是否发送数据给google,选了“Don’t send” 在这里插入图片描述

点击“Cancel” 在这里插入图片描述

点击“Next” 在这里插入图片描述

选择第一项标准“Standard”,如想要自定义的可选择第二项“Custom”,初入门的建议选择第一项 在这里插入图片描述

背景选择,根据自己的喜好选择深色或浅色 在这里插入图片描述

点击“Finish” 在这里插入图片描述

进入组件下载,下载完成后点击“Finish” 在这里插入图片描述

安装完成 在这里插入图片描述

使用需要用到虚拟真机,点击左上角“Android Studio”>“Preferences”,下载对应虚拟真机系统SDK 在这里插入图片描述

3、adb安装配置

终端输入“adb”,会提示“-bash:abd:command not found”,故我们此时需要配置adb命令
1)终端输入“ touch .bash_profile”,创建文件;
2)输入“vim .bash_profile”,打开文件进行编辑;
3)配置以下内容,保存退出

#Android 开发环境配置
ANDROID_HOME=/Users/XXX/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools

4)输入“source .bash_profile”更新文件
5)再次输入”adb”,出现adb命令参数解释,配置成功
在这里插入图片描述

使用操作

操作特点
1)测试对象为程序包,有一定局限性;
2)伪随机事件,不能自定义;
3)可设置事件数量、类型、频率

1、连接真机调试

用USB将手机和电脑连接,并在手机端操作
1)USB连接方式选择“传输文件”
2)设置>开发人员选项>勾选"USB调试”

2、检测连接设备

终端输入“adb devices”,此时手机会弹出是否允许使用该电脑进行调试>勾选允许,同时终端会输出设备信息(如下),即已连接成功 在这里插入图片描述

  • device状态:这个状态表示设备或者模拟器已经连接到adb服务器上。但是这个状态并不代表物理手机设备或者模拟器已经启动完毕并可以进行操作,因为Android 系统在启动时会先连接到adb服务器上,但android 系统启动完成后,设备或者模拟器通常是这个状态。
  • offline状态:这个状态表明设备或者模拟器没有连接到adb服务器或者没有响应。(此时,插拔USB即可)
  • nodevice状态:这个状态表示没有物理设备或者模拟器连接。
  • unauthorized状态:表示未授权.允许授权即可

3、安装测试包

1)在终端输入待测应用文件夹路径“cd /Users/XXX/Downloads”;
2)输入安装命令“adb install 应用包名.apk”;
3)在手机端会弹出安装提示,点击安装>安装完成;
终端信息 在这里插入图片描述

4、执行测试

执行前要先确认需要测试的的应用包名(不是安装包名),可在终端输入以下命令获取

  • adb shell pm list packages #查看你的手机所有的安装包
  • adb shell pm list packages -3 #查看手机上所有的第三方安装包
  • adb shell pm list package -f #将获取手机内所有apk对应的包名和路径,后输入你要查找的app的关键词可快速找到你想要的app包名
  • adb shell "logcat | grep START" #执行该命令,等一小会logcat输出信息完毕,然后点击要查看包名的APP,此时终端输出的信息会包含包名(如在不知道包任何信息下,此方法最快捷) 在终端输入以下命令执行操作
adb shell monkey -p com.cn.XXXX -v 1000(指定com.cn.XXX包打开并执行1000次乱点乱滑动操作)

5、命令介绍

1)-p:指定包名,不指定,则不用加-p 例:-p com.cn.XX1 -p com.cn2.XX2(指定多个包)

2)-v:表示查看monkey执行过程的信息(日志级别)(-v 越多越详细,最多三个) 例:adb shell monkey -v -v -v 100(更详细的日志)

3)-s:伪随机数生成器的seed值。(相当于设置一个路径,因为monkey是 随机事件,所以为了使回归路径一致就需要设置相同的seed值) 例:adb shell monkey 100 -s 5 如果想重现上面例子的路径下次执行的-s也必须为5

4)--throttle: 设定两个事件之间一个固定延迟,可以减缓monkey的执行速度。如果不指定,monkey将不会被延迟,事件将尽可能快地生成和发送消息。单位:毫秒 例:adb shell monkey --throttle 2000 -p com.XXX.XX 100(向XX发送1000次随机事件,每次事件间隔为2秒)

5)可通过设置事件百分比,让某些事件按一定比例执行

  • --pct-touch:触摸事件百分比
  • --pct-motion:滑动事件百分比
  • --pct-pinchzoom:缩放事件百分比
  • --pct-trackball:轨迹球事件百分比(轨迹球事件是包含一系列随机移动和单击事件的事件)
  • --pct-rotation:屏幕旋转事件百分比
  • --pct-nav:基本导航事件百分比(基本导航事件是模拟方向性在设备上输入向上、向下、向左、向右的事件)
  • --pct-majornav:主要导航事件百分比(主要导航事件通常会导致UI产生回馈信息,如单击Back键、Home键、Menu键等)
  • --pct-syskeys:系统事件百分比
  • --pct-appswitch:Activity启动事件百分比
  • --pct-flip:键盘翻转事件百分比
  • --pct-anyevent:其他事件百分比 例: adb shell monkey —throttle 3000 —pct-majornav 40 -p com.XXX.XX 100 向XXX发送1000次随机事件,每次事件间隔为3秒。其中设定主要导航事件的占比为40%。

6)允许出现某种错误时,忽略该错误继续执行

  • --ignore-crashes:程序崩溃或者发生异常后继续执行事件;
  • --ignore-timeouts:程序发生任何超时错误时(application not responding),继续执行事件;
  • --ignore-security-exceptions:程序发生许可错误时(如证书许可,网络许可等),进行执行事件 例:adb shell monkey —throttle 3000 —pct-trackball 50 -p com.tXXX.XXX --ignore-security-exceptions 100

6、日志分析

1)指定日志存放目录 存放在电脑上 如下是存放在桌面的Log2020.txt文件上,需要先在桌面创建该空白文件 例:adb shell monkey -p com.XXX.xxx -v-v-v 1000 >/Users/XXX/Desktop/Log2020.txt

存放在手机上(未试过) 进入Android系统adb shell 执行Monkey命令monkey -p com.kugou.android —pct-touch 25 -v -v 200 1>/mnt/sdcard/monkey.txt 2>/mnt/sdcard/error.txt &

  • 0:标准输入
  • 1 :标准输出
  • 2 :标准错误输出
  • &:后台运行
  • "> ": 重定向,会覆盖原来文件里的内容
  • ">>" : 重定向,追加到原来文件末尾