关于Monkey稳定性测试,这是我看到最详细的文章
通过随机点击屏幕一段时间,看看app会不会崩溃,能不能维持正常运行,这就是稳定性测试。
01、Monkey是什么
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
-p
com.swartz.cicada
–v
100
说明:缺省值,仅提供启动提示、测试完成和最终结果等少量信息 相应源代码如图所示了,这十分有利于调试了
示例Level1:
adb
shell
monkey
-p
com.swartz.cicada
-v-v
100
说明:提供较为详细的日志,包括每个发送到Activity的事件信息
示例Level2:
adb
shell
monkey
-p
com.swartz.cicada
-v-v-v
100
说明:最详细的日志,包括了测试中选中/未选中的Activity信息
2、时间选项的参数通常有:
--throttle:每个事件结束后的间隔时间
-s:表示伪随机数生成的seed值,如果seed值相同,则两次monkey所产生的事件序列也是一样的
示例:
Monkey测试1:adb
shell
monkey
-p
com.swartz.cicada
–s
1
0
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 测试命令如下:
adb shell monkey -p com.swartz.cicada -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 10000 > E:\monkey_log\20170831.txt
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
-p
com.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 Script脚本制作
Monkey script是按照一定语法规则编写有序的用户事件流并且适用于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 命令查看DispatchPointer(5109520,5109520,0,261,128,0,0,0,0,0,0,0);DispatchPointer(5109521,5109521,1,261,128,0,0,0,0,0,0,0);UserWait(2000) // 停顿时间
DispatchPress (KEYCODE_Z) // 文字输入 monkey 只识别英文和数字输入
绵薄之力
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走
这些资料,对于想进阶【自动化测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….
关于Monkey稳定性测试,这是我看到最详细的文章相关推荐
- Monkey稳定性测试初探(二)
记得 关注转发~~~ 之前写过一篇关于稳定性测试的文章: Monkey随机性能压测初探(一) 01 什么是稳定性测试 稳定性测试,是在一定压力的情况下,对系统或某个模块持续进行长时间的操作(一般遵循7 ...
- 一文彻底搞懂App的Monkey稳定性测试
01.什么是稳定性测试 通过随机点击屏幕一段时间,看看app会不会崩溃,能不能维持正常运行 02.Money是什么 Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用 ...
- monkey稳定性测试详细介绍
一.什么是稳定性测试? 通过随机点击屏幕一段时间,看看app会不会奔溃,能不能维持正常运行 二. Money是什么? Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟 ...
- monkey稳定性测试
稳定性测试定义:是指软件长时间的持续运行,系统版本是否稳定,是否持续的为客户提供服务. 指标:异常的次数,异常的频率 稳定性如何实施? 使用monkey向系统发送随机的用户事件流,实现对正在开发的应用 ...
- Android客户端Monkey稳定性测试
目录 Monkey优缺点 优点 缺点 Monkey命令 参数详解 日志分析 日常测试过程中,为了测试APP的稳定性及随机场景,不按照常规用户的思维进行操作APP,可选择使用Monkey进行随机测试.. ...
- Monkey稳定性测试,多少还是要了解一下的(上)
Monkey在开发中非常常见,本篇主要梳理Monkey测试相关知识点. 01 Android整机Monkey测试 Android整机测试需要忽略crash timeout security-excep ...
- android驱动测试,Android: 通过 cucumber 驱动 monkey 做稳定性测试
主要内容 稳定性测试是什么 Monkey 介绍 自动化 Monkey 稳定性测试是什么 通过随机点击屏幕一段时间,看看 app 会不会奔溃,能不能维持正常运行. Monkey 介绍 Monkey 是一 ...
- monkey测试_爱码小士丨 APP稳定性测试(附视频详解)
在实际的测试过程中,主要是对系统的功能来进行测试,用于校验功能的正确性 还需要考虑到系统在未修改的状态下,是否能够稳定运行,即崩溃.闪退.重启.系统异常等等等地情况 在APP中,稳定性测试一般是交由M ...
- APP稳定性测试利器 Monkey介绍、实战使用、日志分析
第一.Monkey简介 Monkey是什么? Monkey 是安卓官方提供的一个命令行工具,可以运行在Android模拟器和实体手机上.通过Monkey 来模拟用户的触摸.点击.滑动.系统按键的操作, ...
最新文章
- 设置VS2010中使用IntelliTrace来进行调试
- 一款名为Blue_Moon的后台模板的初步研究
- 加权最小二乘法的原理讲解
- 湖北经济学院的计算机怎么样,湖北经济学院怎么样名气高吗?真实排名及实力如何?是一本吗...
- C语言课程设计题库及答案,C语言课程设计题目.docx
- EasyUI DataGrid 可编辑列级联操作
- 白鹭引擎 - 项目的创建与动态调试
- Linux C++线程池框架
- bios 微星click_微星主板CLICK BIOS II BIOS设置软件
- 计算机房装修对门的要求,机房建设标准要求
- 【接口篇 / Wan】(6.4) ❀ 02. 单条宽带旁挂软路由优化 ❀ FortiGate 防火墙
- ubuntu 安装 xv 图像查看软件
- linux关触摸屏命令,Linux 禁用触摸屏 触摸板
- 低调,中国的FPGA到底有多强?!
- 电脑显示无法加载远程访问连接管理服务器,Win7系统宽带连接出现错误711无法加载远程访问连接管理器服务如何解决?...
- 【我的渲染技术进阶之旅】如何编译Filament的windows版本程序?
- win10上部署elasticsearch8.1.1
- hbase的系统表、分裂、下载和上传
- 基于MATLAB Coder将matlab代码转换成C代码
- 在线海量主图设计模板无门槛在线设计!