2025年十大在线旅游平台榜中榜 2025-07-01 03:51:40
饥荒魂灯有什么用(饥荒魂灯和提灯哪个好) 2025-09-21 00:09:44
请筷仙姑娘中国民俗 2025-12-19 03:21:40
搜狗拼音输入法皮肤设置【笔记】 2025-05-18 18:51:33
超越SHEIN丨6个月均访问量突破10万的cosplay独立站点推荐 2025-11-17 20:34:28
蜂拥而起的意思 2025-06-21 09:16:10
电脑格式化全攻略:一键重启,迎接全新体验! 2025-12-30 22:31:37
第18届世界杯足球赛16强铲球技术分析 2026-06-17 00:50:35
《崩坏3》防沉迷时间限制是多久 2025-11-15 01:51:43
惊呆了!1600年前的里程表 古代的黑科技 2026-01-29 19:31:15

关于Monkey稳定性测试,这是我看到最详细的文章

▲ 《Linux命令大全》▲

长按二维码免费领取

通过随机点击屏幕一段时间,看看app会不会崩溃,能不能维持正常运行,这就是稳定性测试。

01

Money是什么

Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行测试,检测程序多久的时间会发生异常。和MonkeyRunner几乎是完全不同的,MonkeyRunner相当于是搞自动化测试的了

官方介绍:

https://developer.android.com/studio/test/monkey.html

02

Monkey的介绍

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

Monkey.jar程序是由一个名为“ monkey”的 Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey

Monkey 命令启动方式:

可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数} 来进行Monkey测试

在PC上adb shell 进入Android系统,通过执行 monkey {+命令参数} 来进行Monkey 测试

在Android机或者模拟器上直接执行 monkey 命令 ,可以在Android机上安装Android终端模拟器

03

Monkey架构

04

Monkey弱点

Monkey虽然可以根据一个指定的命令脚本发送按键消息,但 不支持条件判断,不支持读取待测界面的信息来执行验证操作

05

Monkey的压力测试参数

option通常又分为4大类:

常用选项

事件选项

约束选项

调试选项

1、常用选项的参数通常有:

-v: 用于反馈信息级别(一个-v表示一个层级,两个-v表示两个层级,通常最多三个-v)

示例Level0:

adb shell monkey -pcom.swartz.cicada–v100

说明:缺省值,仅提供启动提示、测试完成和最终结果等少量信息 相应源代码如图所示了,这十分有利于调试了

示例Level1:

adb shell monkey -p com.swartz.cicada-v-v100

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

示例Level2:

adb shell monkey -pcom.swartz.cicada-v-v-v100

说明:最详细的日志,包括了测试中选中/未选中的Activity信息

2、时间选项的参数通常有:

--throttle: 每个事件结束后的间隔时间

-s: 表示伪随机数生成的seed值,如果seed值相同,则两次monkey所产生的事件序列也是一样的

示例:

Monkey测试1:adb shell monkey -p com.swartz.cicada –s 10 100

Monkey 测试2:adb shell monkey -p com.swartz.cicada –s 10 100

两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列 为随机的;

3、约束选项的参数通常有:

-p: 指定文件名

count: 指定要发送的事件数

-c: 用此参数指定一个或几个类别,activity必须指定一个category,才能被启动,否则将会启动不了

4、调试选项的参数通常有:

--dbg-no-events: 初始化启动的activity,但是不产生任何事件。

--hprof: 指定该项后在事件序列发送前后会立即生成分析报告

--ignore-crashes: 忽略崩溃

--ignore-timeouts: 忽略超时

--ignore-security-exceptions: 忽略安全异常

--kill-process-after-error: 发生错误后直接杀掉进程

--monitor-native-crashes: 跟踪本地方法的崩溃问题

工作中为了保证测试数量的完整进行,我们一般不会在发生错误时立刻退出压力测试。

monkey 测试命令如下:

kill:此参数用来杀掉进程

kill pid 先执行adb shell 再ps |grep monkey 查询结果如下图中15248 即为PID 再kill pid(15248)即可

例子:

adb shell monkey -p com.tpnet.hlquery --throttle 100 --pct-touch 50--pct-motion 50 -v -v -v 1000 >c:\monkeytest.txt

测试com.tpnet.hlquery这个app,间隔100毫秒,50%的触摸事件,50% 的滑动事件,三个-v输出详细的日志,执行1000个事件,日志输出到c:\monkeytest.txt

ps: 命令运行前手机先解锁,win8 以上要用管理员身份打开cmd

06

Monkey的结果与分析

1、初步分析方法:

Monkey: seed=20 count=100--随机种子和运行次数

:AllowPackage: com.swartz.cicada--指定的测试包

: IncludeCategory: android.intent.category.LAUNCHER--Category包含LAUNCHER

: IncludeCategory: android.intent.category.MONKEY--Category包含MONKEY

// Selecting main activities from category android.intent.category.LAUNCHER

// + Using main activity com.swartz.cicada.LauncherActivity (from package com.swartz.cicada)

// Selecting main activities from category android.intent.category.MONKEY --查询结果列表

// Seeded: 20--随机种子

// Event percentages:

// 15.0% --事件0 为touch事件,就是相当于按下之后弹起来的一个动作

// 10.0%--事件1 为motion,相当于说从起始点到终点有移动了多少步,就是步骤数量

// 2.0% --事件2 为pinchzoom,为两个手指有同时按下去后,都向中间移动后up起来,相当于一个缩放的动作。

// 15.0% --事件3 为trackball,为轨迹球事件

// -0.0% --事件4 为rotation 为屏幕旋转百分比隐藏事件

// 25.0% --事件5 为nav导航事件,就是上下左右

// 15.0% --事件6 为majornav主导航事件,会产生一些窗口的事件

// 2.0% --事件7 为系统按键

// 2.0% --事件8,app应用的打开就是用的这个事件

// 1.0% --事件9,键盘的开,关

// 13.0% --事件10,按键按下在弹起等动作

日志结尾:

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

( 如果Monkey执行中断,在log的最后也能查看到当前已执行的次数。)

2、详细分析:

Monkey测试出现错误之后,一般的分析步骤分为以下几种:

看Monkey日志(注意第一个switch以及异常信息等)

程序无响应问题,在日志中搜索 “ANR”

崩 溃问题: 在日志中搜索 “Exception”

ANR问题:在日志中搜索“ANR”(什么是ANR:Application Not Responding,即应用无响应,具体有关ANR的知识详见:):https://www.tuicool.com/articles/IfQvY3

ForceClosed和程序异常退出问题:在日志中搜索“致命”

3、查看Monkey里面错误前的一些事件动作,并手动执行该动作

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

Monkey执行中断,在log的最后也能查看到当前的已经执行的次数。

07

Monkey测试中内存问题分析

怎么样去确定内存泄漏?

1、内存泄漏 弹出out of memory对话框

2、对于有内存 泄漏但是没有弹出out of memory对话框的情况,可以通过logcat文件GC出信息,(GC:java的垃圾回收机制)

GC_FOR_ALLOC 因为在分配内存时候内存不够引起的

GC_EXPLICIT 表明GC被显式请求触发的,如System.gc调用,

GC_CONCCURRENT 表明GC在内存使用率达到一定的警戒值时候,自动触发

GC_BEFORE_OOM 表明在虚拟机抛出内存不够异常oom之前,执行最后一次回收内存垃圾

08

–hprof 参数报告

adb shell monkey -pcom.tpnet.hlquery --hprof--throttle 100--pct-touch 50--pct-motion 50 -v -v -v 1000 >c:\monkeytest.txt

如果指定了这个选项,monkey会在发送事件的前后生成app内存快照文件,一般会在设备的 /dada/misc目录下生成hprof文件( ps:/data/misc/需要root权限), 拖进AndroidStudio即可查看

09

Monkey 脚本制作

Monkey 是按照一定 语法规则编写有序的用户事件流并且适用于monkey命令工具的脚本, 可以用txt写。

脚本编写完毕放入手机的sdcard目录下,cmd中运行命令

adb shell monkey -f/sdcard/脚本名字 运行次数

结合monkey的-v和–hhprof输出日志和性能报告

adb shell monkey --hprof -f/sdcard/*.txt -v -v -v 3 > c:\monkey.txt

一些脚本命令:

start data>> 将控制 monkey 的一些参数设置和具体的 monkey 命令分隔开来

LaunchAcitivity (pkg_name, cl_name) 启动任意应用的一个活动(界面) pkg_name :要启动的应用包名 cl_name :要打开的活动的类名

DispatchPointer (downTime,eventTime,action,x,y,pressure,size,metaState,xPrecision,yPrecision,device,edgeFlags) 向一个指定位置发送单个手势消息 downTime : 发送消息的时间,只要是合法的长整型数字即可 eventTime : 主要是用在指定发送两个事件之间的停顿 action : 消息是按下还是抬起,0表示按下,1表示抬起 x :x 坐标 y :y 坐标 其余 7 个参数均可以设置为 0

模版:

count = 1 // 下面这个 count 选项, monkey 并没有用到,可以忽略它

speed = 1.0//speed 选项是用来调整两次按键的发送濒率的

start data >> // “start data >>” 是 有 大小写敏感的,而且单词间的间隔只用有一个空格!

LaunchActivity( com.zhengping.contact, com.zhengping.contact.Main) //# Activity 值可以通过 aapt 命令查看

学习安排上!

Linux命令大全

扫描下方二维码免费领取

上文内容不用于商业目的,如涉及知识产权问题,请权利人后台留言联系码同学小编,我们将立即处理。

转载自:http://navo.top/BVJZ3a

“在看”点一点

👇 👇 👇返回搜狐,查看更多