Android Monkey入门及使用
Monkey介绍
Monkey是由Android系统自带,基于Android设备的,模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常和Crash。
Monkey虽然可以根据一个指定的命令脚本发送按键消息,但不支持条件判断,也不支持读取待测界面的信息来执行验证操作。因此具有Monkey的随机性。这种随机给我们带来了一些困扰:
- 手机困在一个界面出不去,导致测试重点偏移
- 手机系统设置被调起,比如wifi被关掉,导致APP联网业务测不到
- 手机在跑Monkey的时候锁屏,导致无法操作了
- 手机跑Monkey时的运行状态无法查看比如内存
如何优化呢,可以在后面的文章中分析。
Monkey 前提
前提一:搭建Android SDK环境
因为monkey是Android SDK里自带的一个工具,因此搭建好adb环境是运行monkey的前提。
搭建的步骤可以参考这篇文章:https://blog.csdn.net/alice_tl/article/details/78363978
前提二:获取待测试APP的包名
获取APP包名的方式有多种,可以参考这篇文章:https://blog.csdn.net/alice_tl/article/details/87094030
Monkey 启动
Monkey程序在Android文件系统中的存放路径是:/system/framework/monkey.jar
Monkey.jar程序由一个名为monkey的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey
因此:
PC终端窗口:执行adb shell monkey {+命令参数}来进行Monkey测试
Android机或者模拟器上:执行monkey 命令,可以在Android机上安装Android终端模拟器
Monkey 命令
默认使用adb shell monkey -p 包名 次数来启动monkey
示例:adb shell monkey -p com.al.office 100
即:对com.al.office的包monkey随机运行一百次
可以通过参数控制测试的APP对象、每个随机操作之间的延迟时间、日志的详尽程度、以及随机数序列。
示例:adb shell monkey –p com.al.office –-throttle 100 –-pct-touch 50 –-pct-tracball 50 –v –v 1000
即:对com.al.office的包monkey执行1000次,其中触摸50%,
monkey的命令参数如下:
-p:允许的包名列表
用此参数指定一个或多个包之后,monkey将只允许系统启动指定的app。如果不指定包,monkey将允许系统启动设备中的所有app。
- 指定一个包:adb shell monkey -p 包名 100
- 指定多个包:adb shell monkey -p 包名1 –p包名2 100
-v:指定反馈信息级别,即日志的详细程度
总共分3个级别,分别对应的参数如下:
- 缺省值,仅提供启动提示、测试完成和最终结果等少量信息:adb shell monkey -p 包名 -v 100
- 提供较为详细的日志,包括每个发送到Activity的事件信息:adb shell monkey -p 包名 -v -v 100
- 最详细的日志,包括了测试中选中/未选中的Activity信息:adb shell monkey -p 包名 -v -v -v 100
-s:随机数种子
指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
- monkey测试1:adb shell monkey -p 包名 –s 10 100
- monkey测试2:adb shell monkey -p 包名 –s 10 100
--throttle:毫秒
指定用户操作(即事件)间的时延,单位是毫秒;如果不指定这个参数,monkey会尽可能快的生成和发送消息。
- adb shell monkey -p 包名 --throttle 3000 100
随机事件类型
虽然monkey中输入的事件是随机产生的,但是可以指定输入事件类型的百分比,让其控制在我们需要的范围内。可以设定的事件类型有:
--pct-motion <percent> |
指定滑动事件的百分比 |
--pct-trackball <percent> |
指定轨迹球事件的百分比 |
--pct-nav <percent> |
指定导航事件中,up、down、left、right等事件的百分比 |
--pct-majornav <percent> |
指定导航事件中,back、menu等事件的百分比 |
--pct-syskeys <percent> |
指定系统按键的百分比,包括HOME、Back、音量等。 |
--pct-appswitch <percent> |
指定Activity之间切换的比例。 |
--pct-anyevent<percent> |
指定任意事件的百分比 |
Monkey 日志分析
正常情况,如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间。如图所示:
(base) alicedembp:~ alice$ adb shell monkey -p com.al.office --pct-motion 15 --pct-trackball 30 -v -v 10 >/Users/alice/Downloads/output.txtbash arg: -pbash arg: com.al.officebash arg: --pct-motionbash arg: 15bash arg: --pct-trackballbash arg: 30bash arg: -vbash arg: -vbash arg: 10
args: [-p, com.al.office, --pct-motion, 15, --pct-trackball, 30, -v, -v, 10]arg: "-p"arg: "com.al.office"arg: "--pct-motion"arg: "15"arg: "--pct-trackball"arg: "30"arg: "-v"arg: "-v"arg: "10"
data="com.al.office"
arg="--pct-motion" mCurArgData="null" mNextArg=3 argwas="--pct-motion" nextarg="15"
data="15"
arg="--pct-trackball" mCurArgData="null" mNextArg=5 argwas="--pct-trackball" nextarg="30"
data="30"
:Monkey: seed=1558282689229 count=10
:AllowPackage: com.al.office
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER
// + Using main activity com.al.fstandard.activity.SplashActivity (from package com.al.office)
// Selecting main activities from category android.intent.category.MONKEY
// Seeded: 1558282689229
// Event percentages:
// 0: 11.0%
// 1: 15.0%
// 2: 1.4666667%
// 3: 30.0%
// 4: -0.0%
// 5: -0.0%
// 6: 18.333334%
// 7: 11.0%
// 8: 1.4666667%
// 9: 1.4666667%
// 10: 0.73333335%
// 11: 9.533334%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.al.office/com.al.fstandard.activity.SplashActivity;end// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.al.office/com.al.fstandard.activity.SplashActivity } in package com.al.office
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 21 // KEYCODE_DPAD_LEFT
:Sending Key (ACTION_UP): 21 // KEYCODE_DPAD_LEFT
Sleeping for 0 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(-3.0,3.0)
:Sending Trackball (ACTION_MOVE): 0:(4.0,-1.0)
:Sending Trackball (ACTION_MOVE): 0:(0.0,-1.0)
:Sending Trackball (ACTION_MOVE): 0:(-1.0,4.0)
:Sending Trackball (ACTION_MOVE): 0:(-3.0,-2.0)
:Sending Trackball (ACTION_MOVE): 0:(2.0,-4.0)
:Sending Trackball (ACTION_MOVE): 0:(-1.0,0.0)
Events injected: 10
:Sending rotation degree=0, persist=false
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=19ms (0ms mobile, 0ms wifi, 19ms not connected)
// Monkey finished
Monkey finished 代表执行完成
这时查看 >/Users/alice/Downloads/output.txt 文件中已经有日志了~,即使Monkey 执行中断, 在log最后也能看到当前执行次数
测试结果分析:
- ANR问题(程序无响应):在日志中搜索“ANR"(application no response)
- 闪退问题:在日志中搜索"crash"
- 异常:搜索"Exception",如果出现空指针,"NullPointerException"肯定是有bug
- 强制退出:搜索"force closed"
Android Monkey入门及使用相关推荐
- Android Monkey测试入门:安装sdk、studio、模拟器,并分析monkey日志
Android Monkey测试入门:安装sdk.studio.模拟器,并分析monkey测试报告结果 1. 安装Java JDK和android SDK 2. 安装Andriod studio及模拟 ...
- Android Framework入门介绍
Android Framework入门介绍 https://blog.csdn.net/fu_kevin0606/article/details/79532710 framework概述 Androi ...
- monkey入门_Monkey 测试一 Monkey 入门
Monkey 测试一 Monkey 入门 android SDK里自带的现成的测试工具有monkey 和 monkeyrunner两个.总的来说,monkey主要应用在压力和可靠性测试上,运行该命令可 ...
- [原创]Android Monkey 在线日志分析工具开发
[原创]Android Monkey 在线日志分析工具开发 在移动App测试过程中,Monkey测试是我们发现潜在问题的一种非常有效手段,但是Android原生的Monkey有其天然的不足,数据不能有 ...
- 《Android 开发入门与实战(第二版)》——6.6节配置改变
本节书摘来自异步社区<Android 开发入门与实战(第二版)>一书中的第6章,第6.6节配置改变,作者eoe移动开发者社区 组编 , 姚尚朗 , 靳岩,更多章节内容可以访问云栖社区&qu ...
- Android Volley入门到精通:初识Volley的基本用法
1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...
- android+studio入门指南+pdf,android+studio使用指南v0.1.pdf
androidstudio使用指南v0.1 <Android Studio入门指南>作者:毕小朋 博客:/wirelessqa Android Studio入门指南v0.1 作者:毕小朋 ...
- [原创]Android Monkey测试工具使用介绍
[原创]Android Monkey测试工具使用介绍 1 Android Monkey介绍 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件 ...
- Android Monkey(转载)
这两天在读Android Monkey的源代码.代码不多,放出分享. 我现说一下,Monkey是干什么的:简单的说就是,模拟用户的touch screen和keyboard的输入.其实这个功能就已经很 ...
最新文章
- OPPOr7sm恢复出厂设置一直卡在开机界面
- Django Bakend--后台管理插件开发-01
- 如何更改PostgreSQL用户密码?
- ARC中的三个关键字
- 将矩阵转为一行_LeetCode1253:矩阵重构
- Angular里遇到的一个依赖注入问题以及解决办法
- Java对象内存图一
- 具备什么样的能力,才能在人工智能企业中获得一席之地
- spring5.x cxf3.4.x 服务端和客户端 非maven版本
- 《Android 应用测试指南》——第2章,第2.4节包浏览器
- windows下安装TensorFlow(Win8 + Anaconda4.4 python3.6)
- C++程序设计必知:多文件结构和编译预处理命令
- 基于 ARIMA-GARCH 模型人名币汇率分析与预测[论文完整][2020年]
- 保定市2017年计算机高考试题,保定三中名师第一时间点评2017年高考理综试卷
- 【在野利用】Apple Mail多个严重漏洞在野利用通告
- 在线网校教育平台的开发,题库的搭建必不可少
- Oracle中 to_date()函数用法详解
- 经历与价值(刘学愚)
- 如何用python求解方程组_用Python的Numpy求解线性方程组
- NLI:Natural Language Inference