Android - 自动化测试 Monkey

前言

最近在群里看到别人讨论自动化测试,然后我就去研究自动化测试了,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 用于操作延时

用于指定用户操作(即事件)间的时延,单位是毫秒
ps:注意[ --throttle ]前面是两个横杠,一开始我还以为是一个.milliseconds单位是毫秒,(个人觉得 300 - 500 是最适合的)

对单个应用进行共1000个事件测试,每个事件延时300毫秒

 monkey -p cn.hjc.appdemo --throttle 300  1000

--pc-anyevent 用于指定操作百分比

用于指定每种类别事件的数目百分比(在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 将不生效.
对手机指定应用进行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,有需要其他命令介绍留言。后续补上.....

你可能感兴趣的:(Android - 自动化测试 Monkey)