浅谈monkey的基本操作:本人也是刚刚学习,以下只是在学习的过程中,查询和操作的记录,一个学习笔记,如有问题,欢迎指正:
一、前提:
- 环境搭建:Java SDK,AndroidSDK,配置adb
下载SDK,解压到不包含中文和空格的目录下;
配置SDK环境变量,将tools和platform-tolols路径添加到环境变量path中
文件中的sdk manager不要打开
操作前提
1.monkey 是基于cmd中adb命令操作;Win+R快捷键打开cmd
2.查看是否连接好设备:adb devices
如图显示则表明已经连接成功了
手机中的文件System/framwork有java包
3.adb shell monkey 进入monkey环境
二、我们例举一个简单的例子来说明monkey的奥秘:
adb shell monkey -p com.tencent.qqlive -s 500 --throttle 300 --pct-touch 20 --pct-motion 20 --pct-nav 50 --ignore-timeouts --ignore-crashes -v -v 10000 >E:\results\test1.txt
列表内容说明:
- adb shell monkey:是所有moneky命令的前提,开始必须要带上
- -p com.tencent.qqlive :-p后面跟着需要操作的包名,指定运行测试某个应用的包名,com.tencent.qqlive 为包名
获取包名的命令:adb shell pm list packages -3 - -s 500:设置seed值为500,即,保证相同的seed值,执行的时间顺序是一样的;即,seed值相同,下一次执行时,所有的操作顺序都是一样的;
- –throttle 300:设置操作事件的延迟时间,后面跟的时间是毫秒为单位,300是人最快的点击时间
- –pct-touch 20:设置操作方式为"点击", 操作概率为20%
- –pct-motion 20:设置操作方式为“滑动”,操作概率为20%
- –pct-nav 50:设置操作导航的改为为50%
- –ignore-timeouts :忽略超时,即到请求超时时,不停止后面的操作
- –ignore-crashes :忽略崩溃,即某一操作崩溃时,不停止后面的操作
- -v:设置输出日志显示的信息,一个-v增加一个级别 ,就是日志的详细程度
- 10000:设置事件执行次数,即随机产生10000次事件
-
E:\results\test1.txt:设置保存事件运行log文件路径,即,产生的所有log保存在E:\results\test1.txt文件里
三、有几个需要注意的点:
1.开始必须要加adb shell monkey
2.所有的参数都需要放在monkey和设置的次数之间,参数的顺序可以调整;若带了-p ,-p必须放在monkey之后,参数必须在-p和count之间
2.每个单词一定要写正确,当运行有问题时,一定要检查一遍单词的正确性
3.–和-也一定要写正确,单杠和双杠很容易弄错
4.想要查看输出日志,除了加上输出文件路径以外(文件路径最好用英文的),一定要记得在末尾加上-v,具体显示日志的详细程度可以自己确定;
5.有时自己的这些脚本已经设置好了,但是还是运行不了应用,提示:Failure [INSTALL_CANCELED_BY_USER] 可能是手机设置的问题,注意查看一下手机的开发者选项里的设置,不同的手机设置不一样,主要找到“允许USB调试”,找到选择“开启"
四、补充
1.seed值说明:譬如:
路线1:南京->河北->北京
路线2:南京->北京
路线3:南京->安徽->河北->北京
Seed值,就是规定某个路线,一旦设定了某个seed值,那么路线就确定了,那以后每一次遇到相同的seed值,就是同一个路线执行
2.一共有9个事件:
–pct {事件类型} {事件百分比}:
触摸事件百分比:–pct-touch 20(表示触摸事件为20%) --0
动作事件百分比:–pct-motion --1
轨迹事件百分比:–pct-trackball --2
基本导航事件百分比:–pct-nav --3
主要导航事件的百分比:–pct-majornav --4
系统按键事件:-pct-syskeys --5
启动事件:-pct-appswitch --6
键盘翻转事件:–pct-file --7
其他事件的百分比:–pct-anyevent 100 --8
3.日志输出分析查询
1.程序无响应的问题:在日志中搜索“ANR”
2.崩溃问题:在日志中搜索“Exception
3.内存泄露发现方法 排除方法通过logcat文件GC输出lgo信息,搜关键词GC,如果有下面四个中的一个,就可能存在内存泄露。(可以打开两个命令窗口,一个执行adb logcat,再执行monkey,待monkey结束后,ctrl+c中断log抓取)
GC_FOR_ALLOC, 因为在分配内存时内存丌够引发的
GC_EXPLICIT, 表明GC被显式请求触发的,如System.gc调用
GC_CONCURRENT, 表明GC在内存使用率达到一定的警戒值时,自动触发
GC_BEFORE_OOM, 表明在虚拟机抛出内存丌够异常OOM之前,执行最后一次回收内存垃圾