Android Monkey压力测试(转)
参考链接:https://www.cnblogs.com/yyh8/p/6707745.html
Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上。 Monkey会发送伪随机的用户事件流,适合对app做压力测试。
1为什么要开展压力测试?
提高产品的稳定性;
提高产品的留存率。
2什么时候开展压力测试?
首轮功能测试通过后和下班后的夜间进行。
3什么是Monkey,Monkey在哪里?
Monkey是发送伪随机用户事件的工具。在手机系统里。
顾名思义,Monkey就是猴子, Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试。 猴子什么都不懂, 只知道乱敲,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常
Monkey 用来做什么
Monkey 主要用于Android 的压力测试 自动的一个压力测试小工具, 主要目的就是为了测试app 是否会Crash.
ADB 安卓调试桥(Android Debug Bridge)
adb的作用是什么
快速更新设备或手机模拟器中的代码,如应用或Android系统升级;
在设备上运行shell命令;
管理设备或手机模拟器上的预定端口;
在设备或手机模拟器上上传下载文件
4什么是MonkeyScript?
是一组可以被Monkey识别的命令集合。并且可以完成重复固定的操作。
5什么是MonkeyRunner?
提供了一系列API;可以完成模拟事件和截图操作。
6Monkey和MonkeyRunner的区别?
Monkey压力测试工具,MonkeyRunner自动化测试工具。
Monkey:在adb shell中,生成用户或系统的伪随机事件
MonkeyRunner:通过特定的API定义特定命令和事件控制设备。
7MonkeyRunner
MonkeyRunner APIs有:
MonkeyRunner:用来连接设备或模拟器
MonkeyDevice:提供安装、卸载应用、发送模拟事件
MonkeyImage:完成图像保存,及对比的操作
MonkeyRunner测试类型:可以帮助我们进行 多设备控制,功能测试,回归测试
8压力测试结果【重点关注以下几点内容】
1CEASH:即崩溃,应用程序在使用过程中非正常退出
2ANR:application not responding
9Monkey程序介绍
(1) Monkey程序由Android系统自带,使用Java诧言写成,在Android文件系统中的存放路径是: /system/framework/monkey.jar;
(2) Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey;
(3)Monkey 命令启动方式:
a)可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试
b)在PC上adb shell 进入Android系统,通过执行 monkey {+命令参数} 来进行Monkey 测试
c ) 在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器
10Monkey 架构
Monkey 运行在设备或模拟器上面,可以脱离PC运行(普遍做法是将monkey作为一个像待测应用发送 随机按键消息的测试工具。验证待测应用在这些随机性的输入面前是否会闪退或者崩溃)

11Monkey弱点
Monkey虽然可以根据一个指定的命令脚本发送按键消息,但其丌支持条件判断,也丌支持读取待测界 面的信息来执行验证操作。
12Monkey 高级参数大全

13Monkey 命令 基本参数介绍
-p <允许的包名列表> 【com.shjt.map是指定的包名】
用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果丌指定包, monkey将允许系统启动设备中的所有app。
指定一个包:adb shell monkey -p com.shjt.map 100
指定多个包:adb shell monkey -p fishjoy.control.menu –p com.shjt.map 100
-v
用亍指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下 表所示:
Level 0 : adb shell monkey -p com.shjt.map -v 100 // 缺省值,仅提供启动提示、测试完成和最终结果等少量信息
Level 1 : adb shell monkey -p com.shjt.map -v -v 100 // 提供较为详细的日志,包括每个发送到Activity的事件信息
Level 2 : adb shell monkey -p com.shjt.map -v -v -v 100 // 最详细的日志,包括了测试中选中/未选中的Activity信息
-s(随机数种子) ——指定随机生成数的seed值 如:adb shell monkey -s <seed> <event-count>
用亍指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。 示例:
monkey测试1:adb shell monkey -p com.shjt.map –s 10 100
monkey测试2:adb shell monkey -p com.shjt.map –s 10 100
--throttle <毫秒> 指定事件之间的间隔 如:adb shell monkey --throttle <milliseconds>
用亍指定用户操作(即事件)间的时延,单位是毫秒;如果丌指定这个参数,monkey会尽可能快的 生成和发送消息。 示
例:adb shell monkey -p com.shjt.map --throttle 3000 100
--触摸事件 设定触摸事件百分比 如:adb shell monkey --pct-touch <percent>
--动作事件 设定动作事件百分比 如:adb shell monkey --pct-motion <percent>
--轨迹球事件 设定轨迹球事件百分比 如:adb shell monkey --pct-trackball <percent>
--基本导航事件 设定基本导航事件百分比 如:adb shell monkey --pct-nav <percent>
--主要导航事件 设定主要导航事件百分比 如:adb shell monkey --pct-majornav <percent>
--系统导航事件 设定系统导航事件百分比 如:adb shell monkey --pct-syskeys <percent>
--启动activity事件 设定启动activity事件百分比 如:adb shell monkey --pct-appswitch <percent>
--不常用事件 设定不常用事件百分比 如:adb shell monkey --pct-anyevent <percent>
--崩溃事件 忽略崩溃和异常 如:adb shell monkey --ignore-crashes <even-count>
--超时事件 忽略超时事件 如:adb shell monkey --ignore-timeouts <even-count>
Monkey 实例
adb shell monkey –p com.shjt.map –-throttle 100 –-pct-touch 50 –-pct-motion 50 –v –v 1000 >c:\monkey.txt
如:
adb shell monkey -p com.hd.smartVillage --throttle 600 -s 3005
--pct-touch 25 --pct-motion 25 --pct-trackball 10 --pct-nav 5
--pct-majornav 5 --pct-syskeys 10 --pct-appswitch 5 --pct-anyevent 5
--ignore-crashes --ignore-timeouts --ignore-security-exceptions
--kill-process-after-error --ignore-native-crashes -v -v -v 1000000 >D:\monkey-test.log
Monkey 查看包名
1、手机中安装APK包名查看器
2、源码下的AndroidManifest.xml文件查看
3、aapt命令查看
4、查看手机中存在的apk包,进入adb shell 命令后---手机的cd data/data文件夹--ls查看所有包名 找到要测apk的包名
5、adb logcat命令查看日志如:adb shell logcat -h。
Monkey 日志分析
正常情况, 如果Monkey测试顺利执行完成, 在log的最后, 会打印出当前执行事件的次数和所花费的时间; // Monkey finished 代表执行完成\
异常情况
Monkey 测试出现错误后,一般的分析步骤
看Monkey的日志 (注意第一个switch以及异常信息等)
1. 程序无响应的问题: 在日志中搜索 “ANR”
2. 崩溃问题:在日志中搜索 “Exception” (如果出现空指针, NullPointerException) 肯定是有bug
Monkey 执行中断, 在log最后也能看到当前执行次数
必须重视Crash
虽然Monkey测试有部分缺陷,我们无法准确地得知重现步骤, Monkey测试所出现的NullPointException, 都是可以在用户使用时出现的, 何时出现只是时间问题
理论上来说, Monkey所有的Crash 都需要在发布前修复掉
crash异常测试结果析取
实践过程:
1安装可以引起crash的app 如:微浏览器
2执行app压力命令
3析取crash的exception信息
ANR异常测试结果析取
1安装可以引起ANR的app 如:微浏览器
2执行app压力命令
3析取anr的exception信息
结束Monkey进程
执行 Monkey 的过程中如果想中途停止 Monkey 程序的运行,需要将 Monkey 的进程杀掉。
- windows 下使用
findstr,linux/mac 下用grep - 执行
adb shell ps | findstr monkey 或 adb shell ps | grep monkey - 获取到 monkey 进程的 pid 之后运行
adb shell kill 进程ID
Android app的压测实践【最基本】
step1准备测试环境
1、准备Android sdk环境,下载完毕进行:环境变量设置。(这一步可能是开发人员需要)
2、下载adb。
step2压测过程:
确认手机和电脑已经成功连接,通过adb device连接确认的
step3压测过程:
安装测试app 在cmd或者苹果终端命令行中输入命令即可安装adb install pachage.apk
step4压测过程:
获取包名
step5压测过程:
发送压力指令 如:adb shell monkey 1000
step6压测过程:
给指定包打压力 如:adb shell monkey -p package 1000 【注意package是包名,如package改为:
com.Android.calculator2】或 adb shell monkey -p 包名 -v 300 >e:\test.ext
Monkey Script
monkey很强大,只能执行随机的一些列操作;monkeyscript是为了满足执行一些可重复操作,固定的一系列操作的需求。
执行monkey脚本的命令:
adb shell monkey -f <scriptfile> <event-count>
1DispatchTrackball命令
轨迹球事件
DispatchTrackball(long downtime....)后面省略号跟着一系列参数
2DispatchPointer命令
点击事件
DispatchPointer(long downtime....)后面省略号跟着一系列参数
3DispatchString命令
输入字符串事件
DispatchString(String text)
4LaunchActivity命令
启动应用
DispatchString(package,Activity)
5UserWait命令
等待事件
UserWait(100)
6DispatchPress命令
按下键值
DispatchPress(int keycode)#keycode 66 回车键 如:DispatchPress(66)
monkeyscript的实践:
启动app
点击输入框
输入查询词
点击键盘上的回车键
点击搜索按钮
等待结果的输出
点击clear按钮
MonkeyRunner
只有MonkeyRunner可以进行截图操作。
1MonkeyRunner API -alert
警告框
void alert(string message,string title,string okTitle)
2MonkeyRunner API -waitForConnection
等待设备连接,有多个device id,需要指明具体哪个设备
waitForConnection(float timeout,string deviceid)
3MonkeyRunner API -drag
拖动
drag(tuple start,tuple end,float duration,integer steps)
4MonkeyRunner API -press
按键
press(string keycode,dictionary type)
keycode名,Down、UP、DOWN_AND_UP
5 MonkeyRunner API - startActivity
启动应用
startActivity(package+'/'+activity)
6 MonkeyRunner API - touch
点击
touch(integer x,integer y,integer type)
x坐标,y坐标,type:Down、UP、DOWN_AND_UP
7MonkeyRunner API - takeSnapshot
截屏
MonkeyImage takeSnapshot ()
8MonkeyRunner API -sameAs
图像对比
Boolean sameAs (MonkeyImage other,float percent)
9MonkeyRunner API - writetoFile
保存图像文件
void writetoFile(string path,string format)
MonkeyRunner的补充说明:
还可以进行一系列多线程和线程操作等
Android Monkey压力测试(转)的更多相关文章
- Android Monkey压力测试环境搭建及使用
Android Monkey压力测试学习笔记 步骤:下载SDK -> 解压进入SDK Manager下载系统 -> 配置环境变量 -> 创建虚拟设备或连接真机 -> 进入命令模 ...
- Android Monkey压力测试
Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上. Monkey会发送伪随机的用户事件流,适合对app做压力测试. 1为什 ...
- Android Monkey 压力测试 介绍
Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上. Monkey会发送伪随机的用户事件流,适合对app做压力测试 阅读目录 ...
- Android Monkey压力测试使用
一.Monkey简介: Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送伪随机的用户事件流(点击.滑动.Application切换.横竖屏.应用关闭)实现对 ...
- 转 Android Monkey压力测试使用
转自:https://www.jianshu.com/p/c8844327f5e9 一.Monkey简介: Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送 ...
- Android Monkey压力测试介绍
monkey:通过Monkey程序模拟用户触摸屏幕.滑动Trackball. 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常. Monkey的构架 Monkey的参数 Monke ...
- Android APP压力测试(三)之Monkey日志自动分析脚本
Android APP压力测试(三) 之Monkey日志自动分析脚本 前言 上次说要分享Monkey日志的分析脚本,这次贴出来分享一下,废话不多说,请看正文. [目录] 1.Monkey日志分析脚本 ...
- Android APP压力测试(二)之Monkey信息自动收集脚本
Android APP压力测试(二) 之Monkey信息自动收集脚本 前言: 上一篇Monkey介绍基本搬抄官方介绍,主要是为了自己查阅方便.本文重点介绍我在进行Monkey时如何自动收集相关信息 ...
- Android APP压力测试(一)之Monkey工具介绍
Android APP压力测试(一) 之Monkey工具介绍 前言 本文主要介绍Monkey工具.Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动. ...
随机推荐
- concat以及group_concat的用法
concat()函数 1.功能:将多个字符串连接成一个字符串. 2.语法:concat(str1, str2,...) 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null ...
- Django rest framework的基本用法
今天在网上看到几篇比较不错的drf基本功能介绍,本来想自己写一篇,后来发现脱不开原作者的思路,遂卒,直接扔链接小伙伴自己去看吧.... 1.django rest framework apiview. ...
- MySQL表结构,表空间,段,区,页,MVCC ,undo 事务槽
索引组织表(IOT表):为什么引入索引组织表,好处在那里,组织结构特点是什么,如何创建,创建IOT的限制LIMIT. IOT是以索引的方式存储的表,表的记录存储在索引中,索引即是数据,索引的KEY为P ...
- Jquery Datepicker DateTimepicker
1.Datepicker http://jqueryui.com/datepicker/ 2.DateTimepicker jquery-ui-timepicker-addon.js http://w ...
- webservice企业开发实例
1. 2. 3.环境变量的配置 4.创建动态web工程-->版本2.5-->tomcat7.0 第一步:创建cxf项目 第二步:添加cxf的jar包 全部将jar包拷入lib目录下 第三步 ...
- CF369E Valera and Queries kdtree
给你一堆线段,求:一个区间内包含的本质不同线段种类数(只要线段有一部分在区间中就算是包含) 考虑容斥:总线段数-被那些没有询问的区间完全覆盖的数量. 用离线+树状数组数点或者 KDtree 数点即可. ...
- *51nod 1815
从若干个数中选出最大的任意两数取模之后的结果 严格次大值 对于此题 首先缩点 然后拓扑排序 维护到达每个点的最大值与严格次大值 感觉思路与代码都OK啊 then.... #include <io ...
- loj 2011
对于第 $i$ 天的询问前 $i - c - 1$ 天都会影响答案主席树维护 #include <iostream> #include <cstdio> #include &l ...
- 【免费】Linux命令行与Shell脚本编程大全 第3版 PDF全本 21MB 百度网盘下载
2019年7月12日更新 链接: https://pan.baidu.com/s/17RDrepFf-GI427I7k3jBcQ 提取码: qk8k 网上的大部分都要积分什么的,很麻烦.这本很清晰,分 ...
- 微信H5的video标签解决方案
https://github.com/cczw2010/weixin-video 偶尔发现了可以h5化的一种更适合的方式,一个有趣的属性 h5-page 已经更新