前言
最近在群里看到别人讨论自动化测试,然后我就去研究自动化测试了,emmmmm 其实测试这种东西应该是由测试去做的.但无奈公司并没有测试员.叫我用我的右手去测是不可能的.程序员是不可能浪费自己的时间的,隐隐约约记得上学的时候老师讲过一种最简单最有效测试工具 - Monkey.还是ADB内置的。
What Monkey
顾名思义,中文意思 : 猴子 。模拟抽了风的用户胡乱的触摸屏幕、滑动Trackball、按键等操作。主要的目的是对指定App进行压力测试.,测试App一些隐藏深处的Bug 例如:NullPointerException 空指针是最简单的一个异常 ,不过在Android中一个NullPointException会导致你的App闪退,这对用户来说无疑就是质疑程序员实力的证据。
Monkey 简单使用
切换到ADB根目录
win + R -> cmd -> cd C:\Users\Administrator-master\AppData\Local\Android\Sdk\platform-tools
进adb.exe命令控制
adb shell
对指定包名应用随机发送1000个事件
monkey -p cn.hjc.appdemo 1000
Monkey命令介绍
monkey -help
usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
[-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
[--ignore-crashes] [--ignore-timeouts]
[--ignore-security-exceptions]
[--monitor-native-crashes] [--ignore-native-crashes]
[--kill-process-after-error] [--hprof]
[--pct-touch PERCENT] [--pct-motion PERCENT]
[--pct-trackball PERCENT] [--pct-syskeys PERCENT]
[--pct-nav PERCENT] [--pct-majornav PERCENT]
[--pct-appswitch PERCENT] [--pct-flip PERCENT]
[--pct-anyevent PERCENT] [--pct-pinchzoom PERCENT]
[--pct-permission PERCENT]
[--pkg-blacklist-file PACKAGE_BLACKLIST_FILE]
[--pkg-whitelist-file PACKAGE_WHITELIST_FILE]
[--wait-dbg] [--dbg-no-events]
[--setup scriptfile] [-f scriptfile [-f scriptfile] ...]
[--port port]
[-s SEED] [-v [-v] ...]
[--throttle MILLISEC] [--randomize-throttle]
[--profile-wait MILLISEC]
[--device-sleep-time MILLISEC]
[--randomize-script]
[--script-log]
[--bugreport]
[--periodic-bugreport]
[--permission-target-system]
-p 用于约束测试对象包名
对手机所有应用进行1000个事件测试
monkey 1000
对单个应用进行1000个事件测试
monkey -p cn.hjc.appdemo 1000
对多个应用进行共1000个事件测试
monkey -p cn.hjc.appdemo -p cn.hjc.appdemo2 1000
-v 用于指定日志信息级别
关于-v等级介绍
Level0
仅提供启动提示、测试完成和最终结果等少量信息
Level1
提供较为详细的日志,包括每个发送到Activity的事件信息
Level2
最详细的日志,包括了测试中选中/未选中的Activity信息
对约束包名进行1000个事件测试,并打印Level0日志, -v -v 代表Level1日志信息
monkey -p cn.hjc.appdemo –v 1000
-s 用于Bug复现
伪随机数发生器的种子值。如果重新运行具有相同种子值的猴子,它将生成相同的事件序列。
ps:使用同一seed数值,使测试事件序列一致。
出现异常停止控制台执行后最后一行
** System appears to have crashed at event 7550 of 10000 using seed 1540463526728
意思就是10000个事件执行了7550 出现了crashed 复现种子1540463526728
monkey -p cn.hjc.appdemo -s 1024 –v 1000
--throttle <milliseconds> 用于操作延时
用于指定用户操作(即事件)间的时延,单位是毫秒
ps:注意[ --throttle ]前面是两个横杠,一开始我还以为是一个.milliseconds单位是毫秒,(个人觉得 300 - 500 是最适合的)
对单个应用进行共1000个事件测试,每个事件延时300毫秒
monkey -p cn.hjc.appdemo --throttle 300 1000
--pc-anyevent <percent>用于指定操作百分比
用于指定每种类别事件的数目百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比)
--pct-anyevent 10
指定任意事件的百分比
ps:默认情况下这个是默认值,及不设置,也就是纯随机事件
monkey -p cn.hjc.appdemo --pct-anyevent 10 1000
--pct-touch 10
指定触摸事件的百分比
monkey -p cn.hjc.appdemo --pct-touch 10 1000
--pct-motion 10
指定滑动事件的百分比
--pct-trackball 10
指定轨迹球事件的百分比
--pct-nav 10
指定导航事件中,up、down、left、right等事件的百分比
--pct-majornav 10
指定导航事件中,back、menu等事件的百分比
--pct-syskeys 10
指定系统按键的百分比,包括HOME、Back、音量等
--pct-appswitch 10
指定Activity之间切换的比例
—ignore-crashes 忽略crashes继续新的Monkey
正常情况来说,运行Monkey测试的时候,出现crashes的时候控制台会停止执行,并出现报错信息。那么有时候需要无人值守,一般都是程序员下班打开Monkey运行一个晚上第二天上班看Bug,就需要到这个命令了.
ps:忽略crashes此命令,-s <seed> 将不生效.
对手机指定应用进行1000个事件测试,忽略异常
monkey -p cn.hjc.appdemo --ignore-crashes 1000
>D:\monkeyLog.txt 将日志文件重定向保存
错误的方式
执行无误,不输出日志
(错误) monkey -p cn.hjc.appdemo -v -v -v 1000 D:\monkeyLog.txt
执行错误 /system/bin/sh: can't create d:monkeyLog.txt: Read-only file system
(错误) monkey -p cn.hjc.appdemo -v -v -v 1000 >D:\monkeyLog.txt
以上的两行代码都是错误的,经过我努力.发现在cmd进入shell 之后并没有权限进行读写文件.so.解决方案是什么呢..
以下这种方法就能正常的输出日志文件,但是运行过程中没有在控制台输出日志,差评
切换到adb 目录上 cd C:\Users\Administrator-master\AppData\Local\Android\Sdk\platform-tools
在目录上执行 .\adb shell monkey -p cn.hjc.appdemo -v -v-v 1000 >D:\monkeyLog.txt
End
相信以上的介绍已经可以杜绝绝大部分Crashes,有需要其他命令介绍留言。后续补上.....