App测试之Monkey压力测试

什么是monkey?

Monkey意指猴子,顽皮淘气。所以Monkey测试,顾名思义也就像猴子一样在软件上乱敲按键,猴子什么都不懂,就爱捣乱。Monkey原理也是类似,通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、滑动Trackball、手势输入等操作),来对设备上的程序进行压力测试,检测程序多久的时间会发生异常,在功能测试完成后进行monkey测试。
Monkey包括许多选项,它们大致分为四大类:
(1)基本配置选项,如设置尝试的事件数量;
(2)运行约束选项,如设置只对单独的一个包进行测试;
(3)事件类型和频率;
(4)调试选项;
总结:Monkey测试用于发现App测试中的问题。如:ANR(Application Not Responding)、响应延时以及CRASH、非正常退出

monkey的原理是什么?

在Monkey运行的时候,它生成事件,并把它们发给系统。同时,Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理(自动停止):
(1)如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止;
(2)如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错;
(3)如果应用程序产生了应用程序不响应ANR(Application Not Responding)的错误,Monkey将会停止并报错;

按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。
(1)Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar;
(2)Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey;
(3)通过在cmd窗口中执行:adb shell monkey {+命令参数}来进行Monkey测试;

架构

Monkey 运行在设备或模拟器上面,可以脱离PC运行(普遍做法是将monkey作为一个测试工具:向待测应用发送 随机按键消息的。验证待测应用在这些随机性的输入面前是否会闪退或者崩溃)
App测试之Monkey压力测试_第1张图片

monkey命令

参数

App测试之Monkey压力测试_第2张图片
Event percentages(事件百分比):
0:点击事件百分比,即参数–pct-touch;
1:滑动事件百分比,即参数–pct-motion;
2:缩放事件百分比,即参数–pct-pinchzoom;
3:轨迹球事件百分比,即参数–pct-trackball;
4:屏幕旋转事件百分比,即参数–pct-rotation;
5:基本导航事件百分比,即参数–pct-nav;
6:主要导航事件百分比,即参数–pct-majornav;
7:系统按键事件百分比,即参数–pct-syskeys;
8:Activity启动事件百分比,即参数–pct-appswitch;
9:键盘唤出隐藏事件百分比,即参数–pct-flip;
10:其他事件百分比,即参数–pct-anyevent。

命令详解

关于环境,我们已经在之前搭建好了,参考:https://blog.csdn.net/weixin_44370919/article/details/121594816

在cmd中输入:adb devices
出现下面信息,表示环境是ok的。(首先确保环境没问题才能执行其他命令)
在这里插入图片描述
要测试App的稳定性,首先要获取到要测试的App的包名。在工作中可以直接问开发索取包名,或者根据经验自己输入命令查找包名也行。

方法一:

获取所有包名:

adb shell pm list package

获取第三方包名:

adb shell pm list package -3

在这里插入图片描述

方法二:
获取包名和activity
输入下面的命令,再点击要启动的app

activityadb locat | findstr START

在这里插入图片描述
之后输入一些Monkey命令,就可以开始测试。

adb shell //进入安卓的系统
exit //退出安卓系统

//获取Monkey命令自带的帮助,在cmd中执行命令:

adb shell  monkey -help

//指定一个包让Monkey程序模拟100次随机用户事件

adb shell monkey -p com.sf.DarkCalulator 100

说明:参数-p用于约束限制,用此参数指定一个或多个包(即App)。指定包之后,Monkey将只允许系统启动指定的APP;如果不指定包,Monkey将允许系统启动设备中的所有APP,com.sf.DarkCalculator为包名,100是事件计数。

//指定日志级别Level 0

adb shell monkey -p com.sf.DarkCalulator  -v 100

说明:日志级别用于指定反馈信息级别(信息级别就是日志的详细程度),日志级别 Level 0 ,仅提供启动提示、测试完成和最终结果等少量信息。

//指定日志级别Level 1

adb shell monkey -p com.sf.DarkCalulator  -v  -v 100

说明:日志级别 Level 1,提供较为详细的日志,包括每个发送到Activity的事件信息。

//指定日志级别Level 2

adb shell monkey -p com.sf.DarkCalulator  -v  -v-v 100

说明:日志级别 Level 2,提供最详细的日志,包括了测试中选中/未选中的Activity信息。

–throttle<毫秒>

用于指定用户操作(即事件)间的时延,单位是毫秒;如果不指定这个参数,monkey会尽可能快的生成和发送消息。

//指定用户操作(即事件)间的时延

adb shell monkey -p com.sf.DarkCalulator  --throttle 1000 -v 100

//调整触摸事件的百分比

adb shell monkey -p com.sf.DarkCalulator --pct-touch 10 -v 1000

说明:–pct-{+事件类别}{+事件类别百分比}用于指定每种类别事件的百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比),–pct-touch {+百分比}用于调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。

//调整动作事件的百分比

adb shell monkey -p com.sf.DarkCalulator --pct-motion 20 -v 1000

说明:调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)。

//调整轨迹事件的百分比

adb shell monkey -p com.sf.DarkCalulator --pct-trackball 30 -v 1000

说明:调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。

//调整"基本“导航”事件的百分比

adb shell monkey -p com.sf.DarkCalulator --pct-nav 40 -v 1000

说明:调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)。

//调整"主要“导航”事件的百分比

adb shell monkey -p com.sf.DarkCalulator --pct-majornav 50 -v 1000

说明:调整主要导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)。

//调整系统按键”事件的百分比

adb shell monkey -p com.sf.DarkCalulator --pct-suskeys 60 -v 1000

说明:调整系统按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、EndCall及音量控制键)

//指定多个类型事件的百分比

adb shell monkey -p com.sf.DarkCalulator --pct-touch 50 --pct-motion 50 -v 1000

注意:各事件类型的百分比总数不能超过100%

//即使app崩溃,Monkey依然继续发送事件,直到事件数目达到目标值为止

adb shell monkey -p com.sf.DarkCalulator --ignore-crashes  -v 1000

说明:用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行。如果使用–ignore-crashes参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数达到1000为止。

//即使APP发生ANR,Monkey依然继续发送事件,直到事件数目达到目标值为止

adb shell monkey -p com.sf.DarkCalulator --ignore-timeouts  -v 1000

说明:用于指定当应用程序发生ANR(ApplicationNo Responding)错误时,Monkey是否停止运行如果使用–ignore-timeouts参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。

APP测试常见问题

Monkey参数的约束限制规范:
1、一个 -p 选项只能用于一个包,指定多个包,需要使用多个 -p 选项;
2、-s 伪随机数生成器的seed值,如果用相同的seed值再次运行monkey,它将生成相同的事件序列,对9个事件分配相同的百分比;
3、-v 命令行的每一个-v将增加反馈信息的级别;

  • Level 0为一个-v的命令,除了启动的提示、测试完成和最终结果之外,提供较少的信息 ;
  • Level 1为两个-v的命令,提供较为详细的测试信息,如逐个发送到Activity的事件 ;
  • Level 2为三个-v的命令,提供更加详细的测试信息,如测试中被选中或未被选中的Activity;

常见命令组合:
1、monkey -p com.package -v 500 :简单的输出测试的信息;
2、monkey -p com.package -v -v -v 500 :以深度为三级输出测试信息;
3、monkey -p com.package --port 端口号 -v :为测试分配一个专用的端口号,不过这个命令只能输出跳转的信息及有错误时输出信息;
4、monkey -p com.package -s 数字 -v 500 :为随机数的事件序列定一个值,若出现问题下次可以重复同样的系列进行排错;
5、monkey -p com.package-v --throttle 3000 500 :为每一次执行一次有效的事件后休眠3000毫秒;

monkey测试参数建议:
间隔时间:500毫秒
种子数:随机
遇到错误:不停止
执行时长:每个机型不小于12小时或点击次数100w次
机型覆盖建议:覆盖高中低端机型
不同芯片平台:高通、海思、MTK等
不同分辨率:480*800以上主流分辨率
不同安卓版本:4.0以上的主流版本
monkey参考命令:

adb shell monkey -p XXX(包名)  --throttle 500
--ignore-crashers --ignore-timeouts
--ignore-security-exceptions
--ignore-native-crashes -v -v -v 1000000 >d:\monkeyScreenLog.log(指定日志文件)

你可能感兴趣的:(APP测试,性能测试,功能测试,压力测试)