Monkey簡(jiǎn)介:
Monkey 是Android SDK提供的一個(gè)命令行工具扳还, 可以簡(jiǎn)單,方便地運(yùn)行在任何版本的Android模擬器和實(shí)體設(shè)備上。?Monkey會(huì)發(fā)送偽隨機(jī)的用戶事件流,適合對(duì)app做壓力測(cè)試走哺。
我們使用Monkey主要用來(lái)測(cè)試發(fā)現(xiàn)crash尉间。
雖然Monkey測(cè)試有部分缺陷锹引,我們無(wú)法準(zhǔn)確地得知重現(xiàn)步驟冶伞, Monkey測(cè)試所出現(xiàn)的NullPointException,??都是可以在用戶使用時(shí)出現(xiàn)的系任,?何時(shí)出現(xiàn)只是時(shí)間問(wèn)題
理論上來(lái)說(shuō)恳蹲,? Monkey所有的Crash?都需要在發(fā)布前修復(fù)掉
準(zhǔn)備工作:
1、mac上俩滥,安裝AndroidSDK并配置環(huán)境變量嘉蕾,安裝adb,可以用brew霜旧,坐等错忱,插上手機(jī),adb devices就可以看到你的手機(jī),如下圖以清,醬紫就成功啦
2儿普、手機(jī)上,打開(kāi)開(kāi)發(fā)者模式玖媚,文件傳輸?shù)然啵汛躮onkey的debug模式的app裝好,并打開(kāi)
命令行調(diào)用:
其實(shí)就一句關(guān)鍵的命令
#! /bin/bash
apkid=$1
count=$2
echo "dump before monkey"
adb shell dumpsys meminfo $apkid >meminfo.txt
adb shell monkey -p "$apkid" --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes --kill-process-after-error --pct-touch 80 --throttle 300 -v -v "$count" > monkey.txt
echo "dump after monkey"
adb shell dumpsys meminfo "$apkid" >>meminfo.txt
echo "dump after start MemoryMonitorActivity"
adb shell dumpsys meminfo "$apkid" >>meminfo.txt
echo "FINISH"
apkid是你app的id今魔,count是點(diǎn)擊的次數(shù)勺像,一般這個(gè)數(shù)越大越容易測(cè)試出更多的crash,但是時(shí)間也會(huì)很長(zhǎng)错森,手機(jī)可能會(huì)很疲勞吟宦。
參數(shù)介紹:
-p <允許的包名列表>
用此參數(shù)指定一個(gè)或多個(gè)包。指定包之后涩维,monkey將只允許系統(tǒng)啟動(dòng)指定的app殃姓。如果丌指定包, monkey將允許系統(tǒng)啟動(dòng)設(shè)備中的所有app瓦阐。
指定一個(gè)包:adb shell monkey -p?com.shjt.map 100
指定多個(gè)包:adb shell monkey -p fishjoy.control.menu? –p?com.shjt.map? 100
-v
用亍指定反饋信息級(jí)別(信息級(jí)別就是日志的詳細(xì)程度)蜗侈,總共分3個(gè)級(jí)別,分別對(duì)應(yīng)的參數(shù)如下 表所示:
Level 0? :? adb shell monkey -p com.shjt.map -v 100??????????? ?? // 缺省值睡蟋,僅提供啟動(dòng)提示踏幻、測(cè)試完成和最終結(jié)果等少量信息
Level 1? :? adb shell monkey -p?com.shjt.map -v? -v 100????????? // 提供較為詳細(xì)的日志,包括每個(gè)發(fā)送到Activity的事件信息
Level 2? :? adb shell monkey -p?com.shjt.map -v? -v? -v 100 ??? // 最詳細(xì)的日志戳杀,包括了測(cè)試中選中/未選中的Activity信息
-s(隨機(jī)數(shù)種子)
用亍指定偽隨機(jī)數(shù)生成器的seed值该面,如果seed相同,則兩次Monkey測(cè)試所產(chǎn)生的事件序列也相同的信卡。? 示例:
monkey測(cè)試1:adb shell monkey -p?com.shjt.map –s 10 100
monkey測(cè)試2:adb shell monkey -p?com.shjt.map –s 10 100
--throttle <毫秒>
用亍指定用戶操作(即事件)間的時(shí)延隔缀,單位是毫秒;如果丌指定這個(gè)參數(shù)傍菇,monkey會(huì)盡可能快的 生成和發(fā)送消息猾瘸。 示
例:adb shell monkey -p?com.shjt.map --throttle 3000 100
Monkey接入CI:
將調(diào)用腳本放在打包機(jī)器上,參數(shù)只需要appid和點(diǎn)擊次數(shù)就夠了丢习。appid是可以適用于其他app须妻,點(diǎn)擊次數(shù)可以隨需求而定。