Monkey 稳定性测试
学习网址:
https://blog.csdn.net/lucytan01/article/details/79958727
https://blog.csdn.net/hebbely/article/details/78901466
一、什么是稳定性测试?
通过随机点击屏幕一段时间,看看app会不会奔溃,能不能维持正常运行
二. Money是什么?
Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行测试,检测程序多久的时间会发生异常。和MonkeyRunner几乎是完全不同的,MonkeyRunner相当于是搞自动化测试的了
官方介绍:
https://developer.android.com/studio/test/monkey.html
三. Monkey的介绍
- Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar
- Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey
- Monkey 命令启动方式
a. 可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试
b. 在PC上adb shell 进入Android系统,通过执行monkey {+命令参数} 来进行Monkey 测试
c. 在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器
四. Monkey架构
五. Monkey弱点
Monkey虽然可以根据一个指定的命令脚本发送按键消息,但不支持条件判断,不支持读取待测界面的信息来执行验证操作
六. 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.时间选项的参数通常有:
-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值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;
--throttle:每个事件结束后的间隔时间
3.约束选项的参数通常有:
-p 指定文件名
count 指定要发送的事件数
-c 用此参数指定一个或几个类别,activity必须指定一个category,才能被启动,否则将会启动不了
4.调试选项的参数通常有:
例子:
adb shell monkey -p com.tpnet.hlquery --throttle 100 --pct-touch 50 --pct-motion 50 -v -v -v 1000 >c:\monkeytest.txt
- 1
测试com.tpnet.hlquery这个app,间隔100毫秒,50%的触摸事件,50%
的滑动事件,三个-v输出详细的日志,执行1000个事件,日志输出到c:\monkeytest.txt
ps: 命令运行前手机先解锁,win8 以上要用管理员身份打开cmd
七. 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:
// 0: 15.0% --事件0 为touch事件,就是相当于按下之后弹起来的一个动作
// 1: 10.0% --事件1 为motion,相当于说从起始点到终点有移动了多少步,就是步骤数量
// 2: 2.0% --事件2 为pinchzoom,为两个手指有同时按下去后,都向中间移动后up起来,相当于一个缩放的动作。
// 3: 15.0% --事件3 为trackball,为轨迹球事件
// 4: -0.0% --事件4 为rotation 为屏幕旋转百分比隐藏事件
// 5: 25.0% --事件5 为nav导航事件,就是上下左右
// 6: 15.0% --事件6 为majornav主导航事件,会产生一些窗口的事件
// 7: 2.0% --事件7 为系统按键
// 8: 2.0% --事件8,app应用的打开就是用的这个事件
// 9: 1.0% --事件9,键盘的开,关
// 10: 13.0% --事件10,按键按下在弹起等动作
日志结尾:
如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间;Monkey
finished代表执行完成。
(如果Monkey执行中断,在log的最后也能查看到当前已执行的次数。)
2.详细分析:
Monkey测试出现错误之后,一般的分析步骤分为以下几种:
2.1看Monkey日志(注意第一个switch以及异常信息等)
2.11程序无响应问题,在日志中搜索 “ANR”
2.12奔溃问题: 在日志中搜索 “Exception”
ANR问题:在日志中搜索“ANR”(什么是ANR:Application Not Responding,即应用无响应,具体有关ANR的知识详见:):https://www.tuicool.com/articles/IfQvY3
2.13ForceClosed和程序异常退出问题:在日志中搜索“致命”
3.查看Monkey里面错误前的一些事件动作,并手动执行该动作。
如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间; // Monkey finished代表执行完成。
Monkey执行中断,在log的最后也能查看到当前的已经执行的次数。
八. Monkey测试中内存问题分析
1. 怎么样去确定内存泄漏?
- 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之前,执行最后一次回收内存垃圾
- 1
- 2
- 3
- 4
- 5
- 6
- 7
九. –hprof 参数报告
adb shell monkey -p com.tpnet.hlquery --hprof --throttle 100 --pct-touch 50 --pct-motion 50 -v -v -v 1000 >c:\monkeytest.txt
- 1
如果指定了这个选项,monkey会在发送事件的前后生成app内存快照文件,一般会在设备的/dada/misc目录下生成hprof文件(ps: /data/misc/需要root权限)
拖进AndroidStudio即可查看
(ps: 我测试了没有生成。。不知道什么回事)
十. Monkey Script脚本制作
Monkey script是按照一定语法规则编写有序的用户事件流并且适用于monkey命令工具的脚本,可以用txt写。
脚本编写完毕放入手机的sdcard目录下,cmd中运行命令
adb shell monkey -f/sdcard/脚本名字 运行次数
- 1
结合monkey的-v和–hhprof输出日志和性能报告
adb shell monkey --hprof -f/sdcard/*.txt -v -v -v 3 > c:\monkey.txt
- 1
- 2
一些脚本命令:
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稳定性测试常用命令
Monkey稳定性测试常用命令: 1.adb shell monkey n 2.adb shell monkey -p com.android.calculator2 1000 3.adb shel ...
- monkey稳定性测试的步骤及策略
1.adb的作用是什么?adb的全称:android debug bridge 安卓调试桥梁,包含在 Android SDK 平台工具软件包中.通过该命令与设备进行通信,以便进行调试adb可以同时管理 ...
- 性能测试-----monkey稳定性测试
我们稳定性测试用的monkey,跑monkey的同时存储log monkey脚本: @echo.@set /p name=请输入你的名字(比如liuyl): set YYYYmmdd=%date:~0 ...
- Monkey稳定性测试
1.环境准备:Android SDK环境配置 2.手机连接/模拟器连接 : 1)手机打开开发者模式并允许USB连接 2)校验手机是否连接:打开cmd 输入 adb devices 3.查找apk包名及 ...
- Monkey稳定性测试环境搭建说明
一.安装Java环境 安装Java环境-JDK:下载地址:http://pan.baidu.com/s/1pJ6Yqs7,jdk安装解压即可. 二.设置环境变量 双击下载的JDK ,设置安装路径.这里 ...
- Android-monkey稳定性测试(多台设备同时进行)
1.目的(原创文章,转载请注明出处-) 主要为指引开展android平台应用的稳定性测试,尽可能地在应用发布前发现crash及an ...
- Android客户端稳定性测试——Monkey
修改时间 修改内容 修改人 2016.6.20 创建 刘永志 2016.6.29 完成 刘永志 Monkey简介: Android SDK自带的命令行测试工具,向设备发送伪随机事件流,对应用程序进行进 ...
- Monkey Android app稳定性测试工具之Monkey使用教程
Monkey Android app稳定性测试工具之Monkey使用教程 by:授客 QQ:1033553122 由于篇幅问题,仅提供百度网盘下载链接: Android app稳定性测试工具之Monk ...
- Android Monkey压力测试
Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上. Monkey会发送伪随机的用户事件流,适合对app做压力测试. 1为什 ...
随机推荐
- Webpack4篇
[Webpack4篇] webpack4 打包优化策略 当前依赖包的版本 1 优化loader配置 1.1 缩小文件匹配范围(include/exclude) 通过排除node_modules下的文件 ...
- find out the installed and runing tomcat version in Linux
To find out the Tomcat version, find this file – version.sh for *nix or version.bat for Windows. Thi ...
- mimikaz获取明文密码
一.windows2008以上不保存明文密码解决办法 mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords& ...
- struts2验证器
1. Struts2 的验证(note6,struts2-8) 1). 验证分为两种: > 声明式验证* >> 对哪个 Action 或 Model 的那个字段进行验证 >&g ...
- libevent使用IOCP网络模型的示例
这段时间抽空学习了一下强大的网络库libevent,其使用标准C语言编写,支持Windows.Linux.Mac等等主流操作系统,早期版本不支持Windows的IOCP,最新版本已经添加上了,在网上找 ...
- vue 学习三 v-model 表单绑定输入 以及修饰符的用处
v-model 指定使用过vue的同学都应该是很熟悉的了,这里就不多介绍,本章主要就是记录一些v-model非常实用的修饰符和对于v-model在html文本框,多行文本框,选择框,单选框,复选框上对 ...
- 关于h5打包后 wag包无法安装的问题
如果不是逻辑错误,那么有可能是下列三种情况之一, 1 wgt打包时的appid与安装包不符 2 打包wgt文件和打包安装包文件 用的不是同一个HBuilder账户 3 安装包打包时权限配置,和wgt包 ...
- Jenkins 搭建 .NET Core 持续集成环境
关于c#的.Net FrameWork 的集成环境以及MsBuild的配置可以看 jenkins搭建.NET FrameWork持续集成环境 这篇文章 关于.NET Core 这个项目 ...
- 大数据学习路线,来qun里分享干货,
一.Linux lucene: 全文检索引擎的架构 solr: 基于lucene的全文搜索服务器,实现了可配置.可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面. 推荐一个大数据学习群 ...
- bzoj1009题解
[解题思路] 先KMP出fail数组,再用fail数组求出M[i][j],表示上一次匹配到第i位,这次可以遇到多少种不同的字符,使之转而匹配到第j位. 设集合S=[1,m]∩N 又设f[i][j]表示 ...