相信不少胖友在测试安卓手机时会用到monkey,博主最近刚好研究了下,共同分享下。
1.首先来介绍一下什么是monkey
monkey 是 Android平台提供的一种自动化测试方法,它会随机的模拟发送各种按键,点击,滑动等用户事件来实现压力测试。看系统版本是否稳定,能否持续的为用户提供服务。从log查看异常的次数、异常的频率。
Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey;可以通过执行: adb shell monkey {+命令参数}来进行Monkey测试。
2.adb shell monkey 可以查看常用的monkey命令
3.monkey命令参数介绍:
-P :
用于执行指定的APP。否则,Monkey默认执行所有APP。
-p com.android.settings -p com.android.calendar
运行adb shell am monitor,打开apk即可获得当前apk的包名
-V :
指定反馈 信息级别
-v 仅提供测试启动、完成和最终结果等信息
-v -v 日志较为详细,包括选中Activity信息
-v -v–v 日志最详细,包括测选中/未选中的
-s:
seed值(种子数),seed值相同->事件序列也相同。 adb shell monkey -p com.android.settings –s 800 180000
--throttle:
事件间的时延,单位是毫秒; 例:adb shell monkey -p com.android.settings --throttle 1000 -s 800 180000
在Monkey运行过程中会遇到异常、崩溃等情况Moneky会停止执行 为了保证执行事件的完整性,可以调试选项的设置 --ignore-crashes: 程序崩溃,依然下发事件,直到事件计数完成。 例:adb shell monkey -p com.android.settings --ignore-crashes --throttle 1000 -s 800 180000
--ignore-timeouts:
程序发生ANR时,继续下发事件,直到计数完成 例:adb shell monkey -p com.android.settings --ignore-timeouts --throttle 1000 -s 800 180000
--ignore-security-exceptions:
指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey继续执行。
--kill-process-after-error:
当应用程序发生错误时,应用程序停止运行,并保持在当前状态
--monitor-native-crashes:
监视并报告应用程序发生崩溃的本地代码
--pct-{+事件类别} {+事件类别百分比}
指定每种类别事件的数目百分比
例: --pct-touch 10 touch事件占比10% 事件类别:动作事件motion、轨迹事件trackball、基本导航事件nav、 主要导航事件majornav、系统按键事件syskeys、启动事件appswitch、 其它类型事件anyevent
4.Monkey自动化简介、与命令详解(黑白名单)
黑名单:不测试的应用 白名单:只测试这部分应用(跟 -p 的作用一样) 注意: 黑名单跟白名单只能设置一个,不能同时使用。
参数: --pkg-blacklist-file PACKAGE_BLACKLIST_FILE apk黑名单,屏蔽掉黑名单中的apk。
--pkg-whitelist-file PACKAGE_WHITELIST_FILE apk白名单,只测试包含在白名单中的apk
示例 --pkg-blacklist-file /data/local/tmp/blacklist.txt --pkg-whitelist-file /data/local/tmp/whitelist.txt
blacklist.txt中:
com.mediatek.mtklogger
com.android.development
com.mediatek.oobe
执行方式:
1、建立黑名单,包名顶格,命名为blacklist.txt,
2、把文件push到路径/data/local/tmp/ adb push d:\blacklist.txt /data/local/tmp/
3、执行命令 adb shell 回车, monkey -- pkg-blacklist-file /data/local/tmp/whitelist.txt --throttle 1000 180000
获取包名:
方式一:adb shell pm list package >/sdcard/package.txt
方式 二:执行一次低事件值的monkey测试,所有包名与事件都会记录在日志中 monkey --monitor-native-crashes --throttle 1000 -v -v -v -s 800 1000 2>/sdcard/error.aaa 1>/sdcard/info.aaa
不推荐第一种方式,该方法获取到手机中的所有的包名,其中有部分为系统类、服务类,这些包monkey没提供事件来调用,也就无法启动测试
5.扩展-Monkey Server
Monkey可以在设备上启动一个服务端让客户机远程的连接到设备,对设备进行调试和控制
1.首先需要利用adb的forward命令,被本地端口和设备端口进行映射 adb forward tcp:1080 tcp:1080
2.然后利用Monkey的--port将Monkey Server开放在1080端口上 adb shell monkey --port 1080
3.这时我们通过telnet连接本机的1080端口, 即可访问到设备上的Monkey server, 并且执行Server中的相关指令。
telnet 127.0.0.1 1080
6.扩展-MonkeyRunner
monkeyrunner和money没有什么直接的关系,monkey是在设备直接运行adb shell命令生成随机事件来进行测试的。相比较而言,monkeyrunner则是通过API发送特定的命令和事件来控制设备。
monkeyrunner接受一个明确的测试脚本(使用python语言编写的)。有明确的条件判断等语句,可用来做功能测试。
MonkeyRunner工具主要有三个类:MonkeyRunner、MonkeyDevice、MonkeyImage.
1.MonkeyRunner类:提供连接真机和模拟器方法waitForConnection(float timeout,string deviceid),还有显示提示显示信息的alert()方法
2.MonkeyDevice类:提供了安装和卸载程序包、开启Activity、发送按键和点击事件、运行测试包等方法
3.MonkeyImage类:在测试过程中用来保存测试截图,保存各种格式
前提需要配置相关环境,可以参考:https://blog.csdn.net/liu_jing_hui/article/details/60874002
步骤一:打开cmd,输入monkeyrunner
步骤二:进入shell命令交互模式后,首要一件事就是导入monkeyrunner所要使用的模块。
步骤三:模拟器/手机的链接
步骤四:app安装并启动,device.installPackage(‘F:\QQyinle_439.apk’)
步骤五:进行启动。device.startActivity(component=“package名/.activity”)
步骤六:在eclipse编写python脚本语言,并运行