如何利用monkey进行手机app测试?

发布时间:2025-03-07 17:09:33 来源:君肯网

 一、简介

Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey包括许多选项,它们大致分为四大类:

基本配置选项,如设置尝试的事件数量

运行约束选项,如设置只对单独的一个包进行测试

事件类型和频率

调试选项

在Monkey运行的时候,它生成事件,并把它们发给系统。同时,Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理(自动停止):

如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。

如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。

如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。

按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件

二、测试准备

Monkey test前必须先进入android设备的adb shell(Android SDK环境配置不在此描述,网上有很多)步骤如下:

1. 开始—&gt运行—&gtcmd

2. usb连接手机,输入 adb shell 命令,待出现 即可输入以下内容

3. 进入手机后,输入相应的monkey命令即可测试

三、基本命令格式

adb shell monkey –p 程序包 –v 测试次数

比如“adb shell monkey –p com.htc.Weather –v 20000”意思是对com.htc.Weather 这个程序包单独进行一次20000次的monkey测试

其中程序包名称可以在串口终端这句命令获得:ls data/data 显示所有程序包

四、测试Log获取

用Monkey test测试,为了方便分析问题,可以在命令monkey命令后面加上 “|logcat -v time”,这样就能边测试边打印Log(记得用终端保存Log文本)例如:

adb shell monkey –p com.htc.Weather –v 20000|logcat -v time

但是这个组合在monkey测试完成后,logcat仍然在执行,测试时需要注意。

如果测试monkey碰到crash或者anr(程序强制性退出或不响应)现象时,在抓取log的同时需要提供traces.txt,步骤如下:

1. 测试版本需要具备root权限

2. 进入data/anr目录下面

3. 将traces.txt文件拷贝到TF卡中,然后拷贝出来发给软件分析即可

monkey压力测试基本使用及要求

Monkey是Android中自带的用来进行压力测试的一个命令行工具。

用Monkey进行App压力测试的结果有三种。

1、正常。

2、Crash :程序崩溃。

3、ANR:程序无响应。

第一步:搭建环境:主要是安装和搭建java和sdk环境,说白了,对我们安卓开发来说,只要搭建好了Android开发环境,Monkey测试环境基本就是OK的了。

第二步:准备好要测试的项目,比如可以是一个.apk安装包,也可以是已经安装到手机上的软件 。

第三步:连接上Android测试设备,可以是模拟器,当然也可以是手机,通过adb 命令对测试项目进行Monkey测试。

当然这一测试也是存在着优缺点的。

优点:功能强大, 主要用于压力和稳定性测试。缺点:本身不提供截屏功能,本身无法完成录制、回放的功能(不过都可以借用其他的开源工具来实现Monkey的截屏和录制等功能)。

Android App Monkey 测试

1、工作时间,为了更快定位问题,日志打印到电脑,错误打印到控制台,使用如下命令:

adb shell monkey -s 201810061010 -p com.noahedu.teachingvideo –throttle 100 -v -v -v 15000000 &gtD:\MonkeyTest\tea\tv_tea_V1.0.9_20181010_1.txt

同时,打开Android Profiler,查看分析内存、cpu、网络情况,及时解决问题。

2、下班前,为了防止网络断开、电脑待机等原因中断测试, 日志打印到移动端,使用如下命令(1为monkey命令;2为错误日志):

adb shell ”monkey -s 201810061010 -p com.noahedu.teachingvideo –throttle 100 –ignore-crashes –ignore-timeouts –ignore-security-exceptions –ignore-native-crashes –monitor-native-crashes -v -v -v 15000000 1&gt/sdcard/tea_mk_10_11.txt  2&gt/sdcard/tea_err_10_11.txt”

adb pull /sdcard/tea_mk_10_11.txt  D:/MonkeyTest/tea/tea_mk_10_11.txt

3、屏蔽声音:

加上:  –pct-syskeys 0 –pct-anyevent  0

例子:adb shell monkey -s 201810061027  –throttle 100 –pct-syskeys 0 –pct-anyevent 0 -v -v -v 15000000 &gtD:\MonkeyTest\tea\tv_system_V1.0.9_20181027_1.txt

原理解释(实际使用 –pct-syskeys 0 没有生效,所以加上–pct-anyevent 0):

adb shell monkey –pct-syskeys &ltpercent&gt

   –pct-syskeys:后面接系统按键事件百分比,系统按键事件通常指仅供系统使用的保留按键,如HOME键、BACK键、拨号键、挂断键、音量键等

adb shell monkey –pct-anyevent &ltpercent&gt

  –pct-anyevent:后面接其他类型事件百分比,其他类型事件指上文中未涉及的所有其他事件,如keypress、不常用的button等

4、通过测试标准:

1、合格:monkey脚本跑3个小时以上,间隔时间300毫秒,错误日志无crash信息、anr信息,内存不超过250M。

2、稳定:monkey脚本跑8个小时以上(大约为下班时间到第二天上班),错误日志无crash信息、anr信息,内存不超过200M。

移动端手机 App 耗电量测试:Monkey 电量测试基本操作及 Android 性能优化

安装sdk后,可在命令行通过 adb shell monkey 查看可用命令

2.monkey常用参数说明:

&ltcolgroup&gt&ltcol&gt&ltcol&gt&lt/colgroup&gt

| 基本参数 | 说明 |

| -p &ltallowed-package-name&gt| 指定一个或多个包 |

| -s &ltseed&gt| 指定一个随机数生成器的seed值 |

| –throttle &ltmilliseconds&gt| 指定事件之间的固定延迟(ms) |

| -v | 指定反馈信息级别(信息级别就是日志的详细程度) |

| -c &ltmain-category&gt| 指定一个或多个类别名 |

| -f &ltscriptfile&gt| 运行指定的monkey脚本 |

&ltcolgroup&gt&ltcol&gt&ltcol&gt&lt/colgroup&gt

| 事件参数 | 说明 |

| –pct-touch &ltpercent&gt| 指定触摸事件百分比 |

| –pct-motion &ltpercent&gt| 指定动作事件百分比 |

| –pct-trackball &ltpercent&gt| 指定轨迹事件百分比 |

| –pct-syskeys &ltpercent&gt| 指定系统按键事件百分比 |

| –pct-nav &ltpercent&gt| 指定基本导航事件百分比 |

| –pct-majornav &ltpercent&gt| 指定主要导航事件百分比 |

| –pct-appswitch &ltpercent&gt| 指定应用启动事件百分比 |

| –pct-flip &ltpercent&gt| 指定flip(弹)事件的百分比 |

| –pct-anyevent &ltpercent&gt| 指定其他类型事件百分比 |

| –pct-pinchzoom &ltpercent&gt| 指定缩放(捏)事件百分比 |

| –pct-permission &ltpercent&gt| 指定 |

&ltcolgroup&gt&ltcol&gt&ltcol&gt&lt/colgroup&gt

| 调试参数 | 说明 |

| –ignore-crashes | 忽略因崩溃或异常引起的停止运行 |

| –ignore-timeouts | 忽略应用发生超时错误(ANR) |

| –ignore-security-exceptions | 忽略应用发生任何权限错误 |

| –monitor-native-crashes | 监视并报告monkey运行时native code的崩溃事件 |

| –ignore-native-crashes | 忽略因native code的崩溃事件 |

如何利用monkey进行手机app测试?

| –kill-process-after-error | 在应用出错后通知系统杀死发生错误的进程 |

| –hprof | 在事件序列前后立即生成profilfing report |

| –dbg-no-events | 监视应用程序所调用的包之间的转换 |

| –wait-dbg | 暂停执行中的monkey,直到有调试器与它连接 |

3.使用真机环境针对皮皮Android客户端进行monkey测试

A.开启手机调试模式,通过USB连接电脑,查看是否连接成,可以使用adb devices命令

B.关闭手机下拉通知栏,锁定手机界面(视机型而定,操作方式不一样),避免测试工程中切出app,影响测试结果。

C.执行monkey测试,使用脚本命名如下,参数请参照上面参数说明理解。

adb shell monkey -p com.chudiangameplay.android -s 10086 –pct-touch 70 –pct-motion 30 –ignore-crashes –ignore-timeouts –monitor-native-crashes –throttle 200 -v -v -v 50000 &gtD:\monkeylog\20200525.log

4.日志分析

日志分析可手动在日志中搜索crashes 、crashes 、error等内容,查看对应区域日志。

日志量较大,可使用如下提供的bat脚本,分析对应日志文件。

Monkey 测试简介

存放路径:Monkey程序是Android系统自带的,由Java语言写成,在Android文件系统中的存放路径是: /system/framework/monkey.jar。

大致操作流程:通过名为“monkey”的Shell脚本去启动Monkey.jar程序(shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey),在你指定的APP应用上模拟用户点击,滑动,输入等操作以极快的速度来对设备程序进行压力测试,检测程序是否会发生异常,然后通过日志进行排错。

主要目的:测试app 是否会是否会Crash。

操作命令格式:adb shell monkey {+命令参数}

获取Android包名方法:(注意:请开启手机开发者模式,请开启手机USB调试模式)

查看正在运行的程序的包名:adb shell dumpsys activity activities | sed -En -e ’/Running activities/,/Run #0/p’ (例如:我清理手机后台之后,开启了QQ,输入命令之后,就会出现QQ的进程,框的地方就是qq的包名)

monkey常用操作命令简介

-p 包名:指定应用程序。例如:adb shell monkey -p 包名 事件总数

-v:打印log级别,-v越多日志信息越详细,最多支持3个。例如:adb shell monkey -p 包名 -v -v -v 事件总数

-s:伪随机数生成器的 seed 值,通俗的说就是个标记,后面跟数字,例如:执行adb shell monkey -s 1 -p 包名 事件总数,这个我标记了-s 1,命令操作完之后,我发现有日志报错,我想重新执行这个monkey操作,那你就可以继续执行这个命令,排错时常用。

-f:后接测试脚本名,例如:adb shell monkey -f 脚本名 事件总数

-throttle:翻译减速的意思,后面接时间,单位为ms,,表示事件之间的固定延迟,如果不接该项,monkey将不会延迟,例如:adb shell monkey –throttle 500 -p 包名 事件总数

–pct-事件类别 11个事件百分比控制(有的是9种事件,没有–pct-pinchzoom,–pct-rotation事件)由安卓SDK决定

11种事件,按顺序罗列的

–pct-touch {+百分比}:0

翻译触摸,触摸事件泛指发生在某一位置的一个down-up事件,点击

–pct-motion {+百分比}:1

翻译动作,动作事件泛指从某一位置接下(即down事件)后经过一系列伪随机事件后弹出(即up事件)

–pct-pinchzoom {+百分比}:2

翻译二指缩放,智能机上的放大缩小手势操作事件

–pct-trackball {+百分比}: 3

翻译轨迹,轨迹事件包括一系列的随机移动,以及偶尔跟随在移动后面的点击事件

–pct-rotation {+百分比}:4

翻译屏幕旋转,横屏竖屏事件

–pct-nav {+百分比}:5

翻译基本导航,基本导航事件主要来自方向输入设备的上、下、左、右事件

–pct-majornav {+百分比}:6

翻译主要导航,主要导航事件通常指引发图形界面的一些动作,如键盘中间按键、返回按键、菜单按键等

–pct-syskeys {+百分比}:7

翻译系统按键,系统按键事件通常指仅供系统使用的保留按键,HOME键、BACK键、拨号键、挂断键、音量键等

–pct-appswitch {+百分比}:8

翻译应用启动,应用启动事件(activity launches)即打开应用,通过调用startActivity()方法最大限度地开启该package下的所有应用

–pct-flip {+百分比}:9

翻译翻转,键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回

–pct-anyevent {+百分比}:10

翻译其他类型,其他类型事件指上文中未涉及的所有其他事件,keypress、不常用的button等

百分比控制以及使用

首先注意一点,这个Event percentages在不同版本的SDK版本中顺序可能会不一样。

如果在monkey参数中不指定事件参数,这些动作都是随机分配的,11个动作其分配的百分比之和为100%,通过添加命令选项来控制每个事件的百分比。

添加事件百分比之后的情况,举例添加–pct-touch事件百分比为100:

命令: adb shell monkey -v -p 包名 –pct-touch 100 100

结果:

说明:尴尬啊,我这个vent percentages竟然有12种,多了一种什么我也不知道,但我敢肯定这跟SDK版本有关系,想知道的同学可以自己从安卓SDK中反编译出monkey源码,通过查看源码中的MonkeySourceRandom.java文件获知!查出来的同学可以告知我下。

说明:尴尬啊,我这个vent percentages竟然有12种,多了一种什么我也不知道,但我敢肯定这跟SDK版本有关系,想知道的同学可以自己从安卓SDK中反编译出monkey源码,通过查看源码中的MonkeySourceRandom.java文件获知!查出来的同学可以告知我下,我想做伸手党

-ignore-crashes:翻译忽略崩溃,当应用程序崩溃或发生失控异常时,monkey将继续运行直到计数完成。如果不设置此项,monkey遇到上述崩溃或异常将停止运行。

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

monkey测试中,如何终止运行:

方法一:

新建一个窗口

执行: adb shell ,

再执行ps | grep monkey,返回来的第一个数字,即是monkey的进程号

然后kill pid 进程号。如图

对手机进行重启

新建一个窗口

执行adb reboot

log日志导出

保存到电脑上。

执行:adb shell monkey -p 包名 -v 1000 &gt/Users/weixiangyang/Desktop/monkey.txt

例如:保存到电脑上标准流与错误流分开保存,分别命名为info.txt,error.txt

info.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时发送的各种事件,如触摸事件的位置等等。

error.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时产生的一些ANR、强制关闭等异常。 执行:adb shell monkey -p 包名 -v 1000 1&gt/Users/weixiangyang/Desktop/info.txt 2&gt/Users/weixiangyang/Desktop/error.txt

例如:保存到电脑上并命名为monkey.txt

保存到手机上。注意:手机要root

例如:保存到手机上并命名为monkey.txt

执行:

adb shell说明:进入adb shell后就相当于进入linux的root下面,但是没有权限在里面创建文件,所以手机要root

monkey -p 包名 -v 1000 &gt/mnt/sdcard/monkey.txt

注意:我的 adb shell 跟monkey XXX是分开执行的,分两行!!!

例如:保存到电脑上标准流与错误流分开保存,分别命名为info.txt,error.txt

执行:adb shell monkey -p 包名 -v 1000 1&gt/mnt/sdcard/info.txt 2&gt/mnt/sdcard/error.txt

以上就是关于如何利用monkey进行手机app测试?全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

更多相关资讯

 一、简介 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸…
查看详情
 一、简介 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸…
查看详情
 一、简介 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸…
查看详情
相关文章
推荐游戏
风之谷
风之谷
游戏资讯 10.5M
下载
斗罗大陆3
斗罗大陆3
游戏资讯 566.9M
下载
冠军网球
冠军网球
游戏资讯 148.1M
下载
最佳炮手
最佳炮手
游戏资讯 68.1M
下载
如梦下弦月
如梦下弦月
游戏资讯 840.1M
下载
富甲封神传
富甲封神传
游戏资讯 263.0M
下载