一、Monkey简介:
monkey是Android中的命令行工具,monkey测试是为了测试软件的稳定性,健壮性快速有效的方法。
Adb shell monkey [-option]
例如:向一个包随机发送500次事件
Adb shell monkey -p packagename -v 500
二、Monkey测试流程:
1.首先启动模拟器或者手机
2.Cmd中输入 adb devices 查看设备情况,如果出现下图,说明模拟器启动成功
3.然后输入adb shell 即可进入shell 界面
4.查看data/data下的包名,我们可以测试的包名都在这个目录下,查看使用ls命令
5.以这个包名为基准com.eastfair.eshowthrough.exhibitorsedition 进行测试
输入 monkey -p com.eastfair.eshowthrough.exhibitorsedition -v 500
-p 表示对象的包名 -v表示反馈信息级别
按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件
Monkey随机测试结束
三、Monkey停止的条件:
1.如果monkey限定了在一个包或者几个包上进行操作,当你在转换到其他包的过程中,monkey会进行阻止
2.如果应用程序崩溃,或者接收到了任何异常信息,monkey将停止。
3.如果应用程序产生了应用程序为响应,monkey停止。
如果结果是 monkey finish 则表示monkey正常运行完毕
四、Monkey的命令详解:
分为常用选项,事件选项,约束选项,调试选项
1.常用选项
-help 打印monkey的基本信息
-v 反馈信息级别,默认为0,每写一个-v就增加一个级别,级别为3级,
日志级别0:monkey -p com.eastfair.eshowthrough.exhibitorsedition -v 500
缺省值,仅提供启动提示、测试完成和最终结果等少量信息
日志级别1:monkey -p com.eastfair.eshowthrough.exhibitorsedition -v -v 500
提供较为详细的日志,包括每个发送到Activity的事件信息
日志级别2:monkey -p com.eastfair.eshowthrough.exhibitorsedition -v -v -v 500
最详细的日志,包括了测试中选中/未选中的Activity信息
2.事件选项
- s 指定产生随机事件的种子值,相同的种子值产生相同的序列 -s 3500 3500表示的种子值
--throttle <毫秒> 每个事件的间隔时间,单位毫秒
示例:monkey -p com.eastfair.eshowthrough.exhibitorsedition --throttle 350 -v 500
--ptc {事件类别} {百分比}
示例:--ptc-touch 5% 调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置) adb shell monkey -p com.htc.Weather--pct-touch 10 1000
--pct-motion 5% 调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)adb shell monkey -p com.htc.Weather --pct-motion 20 1000
--pct-tackball 5% 调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)adb shell monkey -p com.htc.Weather--pct-trackball 30 1000
--pct-nav 5% 调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)adb shell monkey -p com.htc.Weather--pct-nav 40 1000
--pct-majornav 5% 调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)
adb shell monkey -p com.htc.Weather--pct-majornav 50 1000
--pct-syskeys 5% 调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)
adb shell monkey -p com.htc.Weather--pct-syskeys 60 1000
--pct-appswitch 5% 调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
adb shell monkey -p com.htc.Weather--pct-appswitch 70 1000
--pct-anyevent 5% 调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等adb shell monkey -p com.htc.Weather
--pct-anyevent 100 1000* 指定多个类型事件的百分比:
adb shell monkey -p com.htc.Weather--pct-anyevent 50 --pct-appswitch 50 1000
注意:各事件类型的百分比总数不能超过100%;
3.约束选项
-p 此参数指定一个或者多个包,指定包之后,monkey只允许系统启动指定的app,如果不指定,monkey将允许启动系统中所有的app.
- 指定一个包: adb shell monkey -p com.htc.Weather 100
说明:com.htc.Weather为包名,100是事件计数(即让Monkey程序模拟100次随机用户事件)。 - 指定多个包:adb shell monkey -p com.htc.Weather –p com.htc.pdfreader -p com.htc.photo.widgets 100
- 不指定包:adb shell monkey 100
说明:Monkey随机启动APP并发送100个随机事件。
-c activity必须至少包含一个指定的category,才能被启动,否则启动不了;
4.调试选项
--dbg-no-events 初始化启动的activity,不产生任何事件
--hprof 指定该项后在事件序列发送前后会立即生成分析报告 —— 一般建议指定该项
--ignore-crashes 忽略崩溃
--ignore-timeouts 忽略超时,用于指定当应用程序发生ANR(Application No Responding)错误时
--ignore-security-exceptions 忽略安全异常,用于指定当应用程序发生许可错误时(如证书许可,网络许可等)
--kill-process-after-error 发生错误后直接杀掉进程
--monitor-native-crashes 跟踪本地方法的崩溃问题
--wait-dbg 直到连接了模拟器才执行monkey测试
五、停止Monkey命令:
- ps命令 查找uiautomator的进程
打开cmd命令行窗口
输入:
adb shell ps | grep monkey
返回来的第一个数字,即是monkey的进程号
2.kill 命令结束进程继续输入:
adb shell kill [刚才查到的进程号]
同理结束其他进程,和其他应用也可用此法,屡试不爽
六、测试apk集合
APK应用集合分为黑名单和白名单,黑名单是指系统将执行除了黑名单中以外的apk;白名单则是只执行在白名单中的apk。
黑名单的设置方法:
a.创建一个名称为blacklist的txt文档,在文件中输入应用程序的包名,如mms应用,则在文件中输入com.android.mms;如果有多个应用程序不想被执行,则在文件中添加多个包名,注意包名与包名之间均用回车键。
b.将blacklist.txt的文件导入到手机的/data目录下,然后在执行monkey测试的时候使用--pkg-blacklist-file参数再加上blacklist文件的存储路径,其他的参数设置则和测试单一apk没有区别。
白名单的设置方法:
白名单的设置方法和黑名单的设置方法基本一致,只是在创建txt文档的时候,文件的命令应为whitelist。在执行monkey的时候,只执行白名单中的应用。
执行单一apk:
monkey –p <options> -c <options> -s <seed> <限制语句> --throttle <milliseconds> -v 执行次数> C:\monkey_test.txt
执行apk集合:
monkey –pkg-blacklist-file /data/blacklist.txt -c <options> -s <seed> <限制语句> --throttle <milliseconds> -v 执行次数> C:\blacklist_test.txt //执行黑名单以外的应用
或
monkey –pkg-whitelist-file /data/whitelist.txt -c <options> -s <seed> <限制语句> --throttle <milliseconds> -v 执行次数 > C:\whitelist_test.txt //执行白名单的应用
七、设置不依赖USB
在执行monkey测试的时候,如果将monkey测试的日志存放在手机的sdcard或者其他目录下,在monkey测试命令的最后加上一个&符号,则可以再不连接USB的情况下继续执行monkey。如:
monkey –p com.android.mms –s 100 --throttle 1000 –v –v –v 15000 > /mnt/sdcard/monkey_test.txt&
八、连接手机进行monkey测试
测试前提条件
1.将手机恢复出厂设置
2.恢复出厂设置后,进入设置-->关于手机-->高级设置-->勾选‘保持唤醒状态’
3.在设置->安全中设置解锁图案以及PIN码
4.连接 adb tool
5.手机开启后台log(##3646633##),开启main log,, mobile log和net log
6.使用USB线连接手机和电脑
7.在电脑中输入Monkey命令:adb shell monkey -p <your.package.name> --throttle 380 -v -s 3500 300000 > C:\monkey_log.txt
通过monkey_log.txt查看测试结果