今天开始学习monkey,记录一下整个流程一遍后面温习
1.1 JDK安装及java环境配置
首先下载JDK,解压到本地,本文解压到E盘根目录;
之后右键我的电脑->属性->高级->环境变量->系统变量
注意:是下面的系统变量,不是上面的用户变量
新建变量名 JAVA_HOME,变量值 E:\JDK
修改变量 Path ,在最前面加上 %JAVA_HOME%\bin;
注意:“Path"是首字母大写,不要改成"PATH” bin后面要有分号;
注意:系统变量上面的用户变量里,不要有这两个,如果有应该去掉,以避免被干扰。
注意:Win10 下PATH的配置有所不同;
1.2 SDK安装与环境配置:
可以直接下载我上传的SDK,就不需要下面这些繁杂的步骤啦。
如果没有下载我上传的SDK,也可以浏览器打开www.android-studio.org,点击下载,然后选择下载windows版本的SDK。
安装完之后,我们点击一下SDK Manager.exe;如果网速好的,可以点击全部,然后进行安装。我这里点击默认安装12个包。为什么要安装这个了,因为安装之后,会产生一个platform-tools的文件夹,里面就有我们需要的adb.exe,现实安装过程,很容易失败,连接google网络问题经常遇到。
下载完成后我同样解压到E盘根目录,然后在之前的环境变量中配置ANDROID_HOME及Path
新建变量名 ANDROID_HOME,变量值 E:\sdk
修改变量 Path ,在最后面加上 %ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools
打开cmd(快捷键:WIN+R),输入命令adb version
结果如图表示已经安装成功。
接下来连接手机或者是模拟器。
手机连接:使用数据线将手机连接至电脑,打开设置->开发者选项->允许usb调试;
模拟器直接打开即可;
我是用的是模拟器进行的测试,接下来介绍模拟器的连接方法和shell命令的使用。
我使用的是mumu模拟器,连接端口号为7555(注:不同模拟器的连接端口并不相同,详情百度)
首先进入sdk的安装目录,然后连接本地mumu模拟器:
首次连接成功后会出现 success 字样,我因为之前已经连接了,所以提示已经connected。
连接成功后使用命令adb devices
能够查看当前已经连接的设备,有时候我们连接了多个设备,也能够使用命令对指定的设备进行测试,后面再提。
图中可以看到我只连接了一个设备,设备连接成功后就可以对设备进行测试啦。
手机端可以使用install命令将电脑上的apk安装至手机,模拟器可以直接将apk拖入安装。
上图使用adb -s 127.0.0.1:7555 install e:\\doctor.apk
命令,意思是将e盘的doctor.apk文件安装到端口号为7555的设备上,这里就是我的mumu模拟器。
-s :对指定的设备进行操作,通常用于多设备连接情况
apk安装好了之后就可以对其进行测试啦,因为手机和模拟器上安装的应用程序众多,我们可以使用命令行adb shell dumpsys activity|find "mFocusedActivity"
用来查看当前正在运行的应用程序,前提是你要把要测试的应用程序打开哦,效果如下图:
因为我只开启了这一个应用程序,所以当前运行的只有这一个。红框圈起来的部分就是我准备测试的应用程序名称了。
知道名称之后就可以对这个程序进行monkey测试了,我演示一下几个基本的shell命令:
4.1 随机点击命令adb shell monkey -p 应用程序名称 点击数
:
我这里是对刚刚的应用程序进行1000次点击,运行期间你可以看到模拟器上apk被操作
4.2 进行点击后将日志导出命令adb shell -p 应用名 -v 点击数 >电脑某一位置
我这里是将其导出到e盘的test.txt文件中,打开其文件能够看到本次测试的基本信息和一些重要参数,具体意义会在下一章节讲到。
在log的最开始都会显示Monkey执行的seed值、执行次数和测试的包名。
首先我们需要查看Monkey测试中是否出现了ANR或者异常,无响应问题(ANR问题):在日志中搜索“ANR ”(此处有空格), 崩溃问题:在日志中搜索“Exception”,快速定位到关键事件信息 。然后查看Monkey里面出错前的一些事件动作,并手动执行该动作,找出重现步骤,给开发
[adb shell] monkey [options]
,
常用选项
--help:打印帮助信息
-v:指定打印信息的详细级别,一个 -v增加一个级别 , 默认级别为 0 。
Level 0 : adb shell monkey -p fishjoy.control.menu -v 100 最简单(默认),除了启动、测试完成和最终结果外只提供较少的信息。
Level 1 : adb shell monkey -p fishjoy.control.menu -v -v 100 提供了较为详细的测试信息,如逐个发送到Activity的事件信息
Level 2 : adb shell monkey -p fishjoy.control.menu -v -v -v 100 提供了更多的设置信息,如测试中选中或未选中的Activity信息
比较常用的是-v -v -v,一般会保存到指定文件中供开发人员查找bug原因时使用
事件选项
-s:指定产生随机事件种子值,相同的种子值产生相同的事件序列。如: -s 200
--throttle:每个事件结束后的间隔时间——降低系统的压力(如不指定,系统会尽快的发送事件序列)。如:--throttle 100
--pct-touch:指定触摸事件的百分比,如:--pct-touch 5% , 相关的还有以下option:
--pct-motion (滑动事件)、 --pct-trackball (轨迹球事件) 、 --pct-nav (导航事件 up/down/left/right)、 --pct-majornav (主要导航事件 back key 、 menu key)、 --pct-syskeys (系统按键事件 Home 、Back 、startCall 、 endCall 、 volumeControl)、 --pct-appswitch (activity之间的切换)、 --pct-anyevent (任意事件)
约束选项
-p:指定有效的package(如不指定,则对系统中所有package有效),一个-p 对应一个有效package, 如:-p com.ckt -p com.ckt.asura;
-c:activity必须至少包含一个指定的category,才能被启动,否则启动不了;
调试选项
--dbg-no-events:初始化启动的activity,但是不产生任何事件。
--hprof:指定该项后在事件序列发送前后会立即生成分析报告 —— 一般建议指定该项。
--ignore-crashes:忽略崩溃
--ignore-timeouts:忽略超时
--ignore-security-exceptions:忽略安全异常
--kill-process-after-error:发生错误后直接杀掉进程
--monitor-native-crashes:跟踪本地方法的崩溃问题
--wait-dbg:知道连接了调试器才执行monkey测试。
首先查询进程号:
adb shell ps | grep monkey
然后根据返回的进程号,kill它!
adb shell kill [刚才查到的进程号]
如果手机出现崩溃问题,这时候我们一般就需要抓取其崩溃日志给开发。
日志分为两种,一种是无响应日志,一种是一般日志。
什么无响应?通俗的说点了半点也没有动静的,确认是否等待,八九不离十是无响应的。用下面命令来抓日志*(先重现问题,再抓取日志)*:
adb pull /data/anr/traces.txt 自己的保存的路径+要保存的文件名字
举例个例子:adb pull /data/anr/traces.txt D:\SDK\traces.txt
,我把抓取的日志放在D:\SDK,文件名字为traces.txt,到这就可以找到了,注意路径中的空格。
adb logcat -v time >自己的保存的路径+要保存的文件名字
例如: adb shell logcat >D:\SDK\log.txt
注意路径中的空格,命令输入完后一定要重现问题。
问题重现完毕后,点击ctrl+c退出日志抓取,再到指定目录下查看刚刚抓取的日志。
在导出的日志中有许多的参数,其中有些重要参数将详细介绍:
指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
-s
示例:
monkey测试:adb shell monkey -p fishjoy .control.menu –s 10 100
以上只介绍了很基础的一些命令和日志中的参数,更多资料可以参考下面两个大佬的博客,写的很详细的。
命令参考:https://blog.csdn.net/xiangyunwan/article/details/71642114
参数参考:https://blog.csdn.net/jlminghui/article/details/38238443