APP测试 - Monkey命令详解
0. 前言
博猪使用夜神模拟器在电脑装了安卓9的模拟器,听说雷电也不错
环境搭建好了后,WIN+R 在cmd中验证设备是否在线(脱机的话是无法进行下面的操作的)
adb devices
出现下面信息,表示环境是ok的。(首先确保环境没问题才能执行其他命令)
1. 命令详解
要测试App的稳定性,首先要获取到要测试的App的包名。可以直接问开发索取包名,或者根据经验自己输入命令查找包名
获取所有包名:
adb shell pm list package
获取第三方包名:
adb shell pm list package -3
利用monitor监视要打开的APP:
adb shell am monitor
获取包名和activity
adb logcat | findstr START
输入该命令,点击要启动的app,即可获取到包名和activity
由此可得我的应用app的包名为:com.yxy91.creativecat.beta
获取apk的launcherActivity:adb shell dumpsys activity | findstr "mResume (需要手动打开app)
得到包名后,输入一些Monkey命令,就可以开始测试。
获取Monkey命令自带的帮助,在cmd中执行命令
adb shell monkey -help
指定一个包让Monkey程序模拟100次随机用户事件
adb shell monkey -p com.yxy91.creativecat.beta 100
说明:参数-p用于约束限制,用此参数指定一个或多个包(即App)。指定包之后,Monkey将只允许系统启动指定的APP;如果不指定包,Monkey将允许系统启动设备中的所有APP,com.sf.DarkCalculator为包名,100是事件计数。
指定日志级别Level 0
adb shell monkey -p com.yxy91.creativecat.beta –v 100
说明:日志级别用于指定反馈信息级别(信息级别就是日志的详细程度),日志级别 Level 0 ,仅提供启动提示、测试完成和最终结果等少量信息。
指定日志级别Level 1
adb shell monkey -p com.yxy91.creativecat.beta –v -v 100
说明:日志级别 Level 1,提供较为详细的日志,包括每个发送到Activity的事件信息。
指定日志级别Level 2
adb shell monkey -p com.yxy91.creativecat.beta –v -v -v 100
说明:日志级别 Level 2,提供最详细的日志,包括了测试中选中/未选中的Activity信息。
--throttle <毫秒>
用于指定用户操作(即事件)间的时延,单位是毫秒;如果不指定这个参数,monkey会尽可能快的生成和发送消息。
指定用户操作(即事件)间的时延
adb shell monkey -p com.yxy91.creativecat.beta –-throttle 1000 -v 100
说明:throttle单位是毫秒。
调整触摸事件的百分比
adb shell monkey -p com.yxy91.creativecat.beta --pct-touch 10 -v 1000
说明:--pct-{+事件类别}{+事件类别百分比}用于指定每种类别事件的百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比),--pct-touch {+百分比}用于调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。
调整动作事件的百分比
adb shell monkey -p com.yxy91.creativecat.beta --pct-motion 20 -v 1000
说明:调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)。
调整轨迹事件的百分比
adb shell monkey -p com.yxy91.creativecat.beta --pct-trackball 30 -v 1000
说明:调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。
调整“基本”导航事件的百分比
adb shell monkey -p com.yxy91.creativecat.beta --pct-nav 40 -v 1000
说明:调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)。
调整主要导航事件的百分比
adb shell monkey -p com.yxy91.creativecat.beta --pct-majornav 50 -v 1000
说明:调整主要导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)。
调整系统按键事件的百分比
adb shell monkey -p com.yxy91.creativecat.beta --pct-syskeys 60 -v 1000
说明:调整系统按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)
指定多个类型事件的百分比
adb shell monkey -p com.yxy91.creativecat.beta --pct-touch 50 --pct-motion 50 1000
注意:各事件类型的百分比总数不能超过100%
即使app崩溃,Monkey依然继续发送事件,直到事件数目达到目标值为止
adb shell monkey -p com.yxy91.creativecat.beta --ignore-crashes -v 1000
说明:用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行。如果使用--ignore-crashes参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数达到1000为止。
即使APP发生ANR,Monkey依然继续发送事件,直到事件数目达到目标值为止
adb shell monkey -p com.yxy91.creativecat.beta --ignore-timeouts -v 1000
说明:用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行如果使用--ignore-timeouts参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。
2. Monkey参数的约束限制规范:
1. 一个 -p 选项只能用于一个包,指定多个包,需要使用多个 -p 选项;
2.-s <seed> 伪随机数生成器的seed值,如果用相同的seed值再次运行monkey,它将生成相同的事件序列,对9个事件分配相同的百分比;
3.-v 命令行的每一个-v将增加反馈信息的级别:
Level 0为一个-v的命令,除了启动的提示、测试完成和最终结果之外,提供较少的信息 ;
Level 1为两个-v的命令,提供较为详细的测试信息,如逐个发送到Activity的事件 ;
Level 2为三个-v的命令,提供更加详细的测试信息,如测试中被选中或未被选中的Activity;
3. Monkey测试参数建议
间隔时间:500毫秒;
种子数:随机;
遇到错误:不停止;
执行时长:每机型不小于12小时或点击次数:100万次;
机型覆盖建议:覆盖高中低端机型
不同芯片平台(高通、海思、MTK等)
不同分辨率(480*800以上主流分辨率)
不同安卓版本(安卓7.0以上主流安卓版本);
4. Monkey参考命令
adb shell monkey -p com.tencent.XXX(替换包名) --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes -v -v -v 1000000>d:\monkeyScreenLog.log
常见命令组合:
1.monkey -p com.package -v 500 :简单的输出测试的信息;
2.monkey -p com.package -v -v -v 500 :以深度为三级输出测试信息;
3.monkey -p com.package --port 端口号 -v :为测试分配一个专用的端口号,不过这个命令只能输出跳转的信息及有错误时输出信息;
4.monkey -p com.package -s 数字 -v 500 :为随机数的事件序列定一个值,若出现问题下次可以重复同样的系列进行排错;
5.monkey -p com.package -v --throttle 3000 500 :为每一次执行一次有效的事件后休眠3000毫秒;
5. Monkey日志定位问题
Android平台应用程序可能产生以下两种问题:
1、Crash
2、ANR (响应延时)
典型Monkey测试日志文件输出,如下:
主要Log文件说明
anr目录:从手机/data/anr导出的日志,保存发生anr crash 时的相关信息;
通过日志定位问题步骤
在MonkeyScreen.Log日志文件搜索关键词“Fatal”、“Crash”、“ANR”定位到发生Crash的详细堆栈信息,或分析发生Crash前后的日志事件;
如图:
作者:小林同学_Scorpio
本博客所有文章仅用于学习、分享和交流目的,欢迎非商业性质转载。
博主的文章没有高度、深度和广度,只是凑字数,做笔记。由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用参考、引用、抄袭、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个无耻的文档搬运工!