由于公司業(yè)務(wù)需要,需要對(duì)相應(yīng)的一些apk進(jìn)行相應(yīng)的一些壓力測(cè)試。當(dāng)然,現(xiàn)在被使用得比較多的下面介紹幾種
android測(cè)試框架lint
CTS
Monkey
Monkeyrunner
benchmark
其它test tool等等。
最終討論后決定采取Monkey/MonkeyRunner來進(jìn)行測(cè)試,但是樓主沒有相關(guān)的經(jīng)驗(yàn),所以一邊查閱資料,一邊學(xué)習(xí)。

參考文獻(xiàn):
https://www.cnblogs.com/zhaoyanjun/p/6861278.html 【monkey架構(gòu)設(shè)計(jì)】
https://www.cnblogs.com/plokmju/p/6445975.html 【monkey的用法】
Monkey
什么是Monkey
Monkey是Android中的一個(gè)命令行工具,可以運(yùn)行在模擬器里或?qū)嶋H設(shè)備中。它向系統(tǒng)發(fā)送偽隨機(jī)的用戶事件流(如按鍵輸入、觸摸屏輸入、手勢(shì)輸入等),實(shí)現(xiàn)對(duì)正在開發(fā)的應(yīng)用程序進(jìn)行壓力測(cè)試。Monkey測(cè)試是一種為了測(cè)試軟件的穩(wěn)定性、健壯性的快速有效的方法。(其實(shí)可以想象成一只猴子啥都不知道,瘋狂亂敲......)
monkey的特點(diǎn)
Monkey 程序是由 Android 系統(tǒng)自帶,使用 Java 語言寫成。在Android文件系統(tǒng)中的存放路徑是:
/system/framework/monkey.jar;
Monkey.jar程序是由一個(gè)名為“monkey”的Shell腳本來啟動(dòng)執(zhí)行,shell腳本在Android文件系統(tǒng)中 的存放路徑是:
/system/bin/monkey;
也就是說monkey可以直接通過打包進(jìn)測(cè)試工具中,被測(cè)試人員直接使用,網(wǎng)絡(luò)上許多第三方的monkey工具就是通過對(duì)原生的Monkey.jar包進(jìn)行二次開發(fā)實(shí)現(xiàn)。
Monkey測(cè)試的停止條件
如果限定了Monkey運(yùn)行在一個(gè)或幾個(gè)特定的包上,那么它會(huì)監(jiān)測(cè)試圖轉(zhuǎn)到其它包的操作,并對(duì)其進(jìn)行阻止。
如果應(yīng)用程序崩潰或接收到任何失控異常,Monkey將停止并報(bào)錯(cuò),前提在于沒有配置crash繼續(xù)執(zhí)行的操作下。
如果應(yīng)用程序產(chǎn)生了應(yīng)用程序不響應(yīng)(application not responding)的錯(cuò)誤,Monkey將會(huì)停止并報(bào)錯(cuò),前提在于沒有配置ANR繼續(xù)執(zhí)行的操作下
Monkey 架構(gòu)
Monkey 運(yùn)行在設(shè)備或模擬器上面,可以脫離PC運(yùn)行(一般在一些大公司中都是將其抽離成一個(gè)測(cè)試專用的APP工具,使用相應(yīng)的操作來完成測(cè)試,不過樓主暫時(shí)沒有找到比較好的二次開發(fā)工具,希望有大神可以指導(dǎo)一下)
Monkey的基本用法
由于Monkey的命令行過多,這里選擇比較常用的操作命令行來做引申講解,有興趣的朋友可以到google官網(wǎng)繼續(xù)學(xué)習(xí)。

基本語法如下:
adb shell monkey [options]
例如:monkey -p your.package.name -v 500
如果不指定options,Monkey將以無反饋模式啟動(dòng),并把事件任意發(fā)送到安裝在目標(biāo)環(huán)境中的全部包。下面是一個(gè)更為典型的命令行示例,它啟動(dòng)指定的應(yīng)用程序,并向其發(fā)送500個(gè)偽隨機(jī)事件。
可以在Android Studio中可以直接使用,但是也可以在android sdk中的platform-tools目錄下,直接cmd輸入命令 adb shell 。

接下來就開始啃啃這塊最難的硬骨頭:
- 1、允許啟動(dòng)手機(jī)里面所有的 App , 隨機(jī)操作 1000 次
adb shell monkey 1000
- 2、-p : 允許啟動(dòng) App 的包名
-
啟動(dòng)一個(gè)包名的應(yīng)用
由于樓主的手機(jī)是小米手機(jī),所以測(cè)試小米的計(jì)算器功能,其包名為com.miui.calculator,具體命令行為:
-
adb shell monkey -p com.miui.calculator 1000
最終效果是monkey會(huì)調(diào)用小米自帶的計(jì)算器功能運(yùn)行1000次。
- 啟動(dòng)一個(gè)包名的應(yīng)用
在一些講解命令行時(shí),只講到單APP的調(diào)試,但是monkey具備同時(shí)對(duì)多設(shè)備進(jìn)行調(diào)試的能力,只需要增加多個(gè) -p 包名字段就可以實(shí)現(xiàn)。
adb shell monkey -p com.miui.calculator -p com.android.thememanager 1000
該命令行可以實(shí)現(xiàn)對(duì)多個(gè)應(yīng)用進(jìn)行開啟的功能。
- 3、-v : 操作日志記錄
命令行不同個(gè)數(shù)的-v會(huì)有不同的效果- -v:Level 0(缺省值)除 啟動(dòng)提示、測(cè)試完成和最終結(jié)果之外,提供較少信息。
- -v -v :Level 1提供較為詳細(xì)的測(cè)試信息,如逐個(gè)發(fā)送到Activity的 事件。
- -v -v -v :Level 2提供更加詳細(xì)的設(shè)置信息,如測(cè)試中被選中的或未被選中的Activity。
如:
adb shell monkey -p com.miui.calculator -v -v -v 1000
- 4、-s 偽隨機(jī)數(shù)生成器的seed值
測(cè)試為了人員能夠重現(xiàn)測(cè)試到的bug問題,需要能夠?qū)onkey的隨機(jī)生成事件有重現(xiàn)能力,monkey允許對(duì)隨機(jī)事件的seed值做設(shè)置,當(dāng)兩次seed值一樣,整個(gè)測(cè)試效果將會(huì)產(chǎn)生相同的事件序列。
adb shell monkey -p com.miui.calculator -s 12345 -v 1000
- 5、--ignore-crashes 忽略崩潰/--ignore-timeouts 忽略超時(shí)/--ignore-security-exceptions 忽略安全異常
一般情況下,APP在操作過程中會(huì)存在崩潰、超時(shí)、異常等情況,按照前面所提到的,這會(huì)導(dǎo)致monkey直接停止測(cè)試。如果想要忽略掉這些情況,直接配置忽略設(shè)置就可以了。ps:這里的超時(shí)并不是網(wǎng)絡(luò)超時(shí),而是相應(yīng)超時(shí)導(dǎo)致的ANR。
adb shell monkey
-p com.miui.calculator
--ignore-crashes --ignore-timeouts --ignore-security-exceptions
-v 1000
- 6.--throttle : 事件之間加入延時(shí)操作
在某些不需要頻率過快,或需要定頻率進(jìn)行交互時(shí),可以采用--throttle來做事件之間的延時(shí)操作。
·adb shell monkey -p com.miui.calculator --throttle 500 -v 1000
- 7、指定Monkey事件
在Monkey中,雖然輸入的事件是隨機(jī)產(chǎn)生的,但是可以指定輸入事件類型的百分比,讓其控制在我們需要的范圍內(nèi)。
在Monkey中,可以設(shè)定的事件類型有:
* --pct-touch <percent>:指定觸摸事件的百分比。
* --pct-motion <percent>:指定滑動(dòng)事件的百分比。
* --pct-trackball <percent>:指定軌跡球事件的百分比。
* --pct-nav <percent>:指定導(dǎo)航事件中,up、down、left、right等事件的百分比。
* --pct-majornav <percent>:指定導(dǎo)航事件中,back、menu等事件的百分比。
* --pct-syskeys <percent>:指定系統(tǒng)按鍵的百分比,包括HOME、Back、音量等。
* --pct-appswitch <percent>:指定Activity之間切換的比例。
* --pct-anyevent <percent>:指定任意事件的百分比。
其中,當(dāng)不作任何配置的時(shí)候,默認(rèn)為--pct-anyevent <percent>,此時(shí)所有事件的觸發(fā)均為隨機(jī)的。當(dāng)所有事件的百分比加起重來小于100%的時(shí)候,多余的隨機(jī)事件也將被轉(zhuǎn)化為--pct-anyevent <percent>事件。超過時(shí),系統(tǒng)會(huì)重新運(yùn)算相應(yīng)的比例。
到此,基本的命令行就已經(jīng)講解完畢,如果還有需要的配置命令行,請(qǐng)參考--help進(jìn)行拓展,這里就不贅述,最后附上命令行:
adb shell --help
最終效果粘貼在下面:
usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]//調(diào)試的應(yīng)用包名
[-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]//測(cè)試對(duì)應(yīng)的categrory
[--ignore-crashes] [--ignore-timeouts]
[--ignore-security-exceptions]
[--monitor-native-crashes] [--ignore-native-crashes]//忽略系列的大爺們
[--kill-process-after-error] [--hprof]//默認(rèn)
[--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]//事件百分比設(shè)置
[--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] ...]//設(shè)置隨機(jī)數(shù)生成器的seed值
[--throttle MILLISEC] [--randomize-throttle]//延時(shí)操作
[--profile-wait MILLISEC]
[--device-sleep-time MILLISEC]
[--randomize-script]
[--script-log]
[--bugreport]
[--periodic-bugreport]
COUNT
如何關(guān)閉monkey
monkey在運(yùn)行過程中就算PC拔掉USB數(shù)據(jù)線,也會(huì)繼續(xù)進(jìn)行,但是在某些情況下,將我們需要monkey關(guān)掉。這需要強(qiáng)制將正在運(yùn)行monkey。
首先。使用
adb shell
ps | grep monkey
kill pid(前面會(huì)輸出)

接下來,會(huì)將如何對(duì)輸出的log進(jìn)行解讀和調(diào)試。希望大家可以點(diǎn)贊評(píng)論