前言
最近在群里看到別人討論自動化測試,然后我就去研究自動化測試了,emmmmm 其實測試這種東西應(yīng)該是由測試去做的.但無奈公司并沒有測試員.叫我用我的右手去測是不可能的.程序員是不可能浪費自己的時間的,隱隱約約記得上學(xué)的時候老師講過一種最簡單最有效測試工具 - Monkey.還是ADB內(nèi)置的彻消。
What Monkey
顧名思義,中文意思 : 猴子 呵恢。模擬抽了風(fēng)的用戶胡亂的觸摸屏幕听皿、滑動Trackball潦匈、按鍵等操作宇攻。主要的目的是對指定App進(jìn)行壓力測試.,測試App一些隱藏深處的Bug 例如:NullPointerException 空指針是最簡單的一個異常 ,不過在Android中一個NullPointException會導(dǎo)致你的App閃退,這對用戶來說無疑就是質(zhì)疑程序員實力的證據(jù)。
Monkey 簡單使用
切換到ADB根目錄
win + R -> cmd -> cd C:\Users\Administrator-master\AppData\Local\Android\Sdk\platform-tools
進(jìn)adb.exe命令控制
adb shell
對指定包名應(yīng)用隨機發(fā)送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 用于約束測試對象包名
對手機所有應(yīng)用進(jìn)行1000個事件測試
monkey 1000
對單個應(yīng)用進(jìn)行1000個事件測試
monkey -p cn.hjc.appdemo 1000
對多個應(yīng)用進(jìn)行共1000個事件測試
monkey -p cn.hjc.appdemo -p cn.hjc.appdemo2 1000
-v 用于指定日志信息級別
關(guān)于-v等級介紹
Level0
僅提供啟動提示皮获、測試完成和最終結(jié)果等少量信息
Level1
提供較為詳細(xì)的日志牲剃,包括每個發(fā)送到Activity的事件信息
Level2
最詳細(xì)的日志,包括了測試中選中/未選中的Activity信息
對約束包名進(jìn)行1000個事件測試,并打印Level0日志, -v -v 代表Level1日志信息
monkey -p cn.hjc.appdemo –v 1000
-s 用于Bug復(fù)現(xiàn)
偽隨機數(shù)發(fā)生器的種子值清酥。如果重新運行具有相同種子值的猴子扶镀,它將生成相同的事件序列。
ps:使用同一seed數(shù)值,使測試事件序列一致焰轻。
出現(xiàn)異常停止控制臺執(zhí)行后最后一行
** System appears to have crashed at event 7550 of 10000 using seed 1540463526728
意思就是10000個事件執(zhí)行了7550 出現(xiàn)了crashed 復(fù)現(xiàn)種子1540463526728
monkey -p cn.hjc.appdemo -s 1024 –v 1000
--throttle <milliseconds> 用于操作延時
用于指定用戶操作(即事件)間的時延臭觉,單位是毫秒
ps:注意[ --throttle ]前面是兩個橫杠,一開始我還以為是一個.milliseconds單位是毫秒,(個人覺得 300 - 500 是最適合的)
對單個應(yīng)用進(jìn)行共1000個事件測試,每個事件延時300毫秒
monkey -p cn.hjc.appdemo --throttle 300 1000
--pc-anyevent <percent>用于指定操作百分比
用于指定每種類別事件的數(shù)目百分比(在Monkey事件序列中,該類事件數(shù)目占總事件數(shù)目的百分比)
--pct-anyevent 10
指定任意事件的百分比
ps:默認(rèn)情況下這個是默認(rèn)值,及不設(shè)置,也就是純隨機事件
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
指定導(dǎo)航事件中辱志,up蝠筑、down、left揩懒、right等事件的百分比
--pct-majornav 10
指定導(dǎo)航事件中什乙,back、menu等事件的百分比
--pct-syskeys 10
指定系統(tǒng)按鍵的百分比已球,包括HOME臣镣、Back、音量等
--pct-appswitch 10
指定Activity之間切換的比例
—ignore-crashes 忽略crashes繼續(xù)新的Monkey
正常情況來說,運行Monkey測試的時候,出現(xiàn)crashes的時候控制臺會停止執(zhí)行,并出現(xiàn)報錯信息和悦。那么有時候需要無人值守,一般都是程序員下班打開Monkey運行一個晚上第二天上班看Bug,就需要到這個命令了.
ps:忽略crashes此命令,-s <seed> 將不生效.
對手機指定應(yīng)用進(jìn)行1000個事件測試,忽略異常
monkey -p cn.hjc.appdemo --ignore-crashes 1000
>D:\monkeyLog.txt 將日志文件重定向保存
錯誤的方式
執(zhí)行無誤,不輸出日志
(錯誤) monkey -p cn.hjc.appdemo -v -v -v 1000 D:\monkeyLog.txt
執(zhí)行錯誤 /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
以上的兩行代碼都是錯誤的,經(jīng)過我努力.發(fā)現(xiàn)在cmd進(jìn)入shell 之后并沒有權(quán)限進(jìn)行讀寫文件.so.解決方案是什么呢..
以下這種方法就能正常的輸出日志文件,但是運行過程中沒有在控制臺輸出日志,差評
切換到adb 目錄上 cd C:\Users\Administrator-master\AppData\Local\Android\Sdk\platform-tools
在目錄上執(zhí)行 .\adb shell monkey -p cn.hjc.appdemo -v -v-v 1000 >D:\monkeyLog.txt
End
相信以上的介紹已經(jīng)可以杜絕絕大部分Crashes,有需要其他命令介紹留言杈女。后續(xù)補上.....