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 <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,有需要其他命令介绍留言。后续补上.....

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容