monkey自動(dòng)化測(cè)試(1)----命令行

由于公司業(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啟動(dòng)架構(gòu)圖

Monkey的基本用法

由于Monkey的命令行過多,這里選擇比較常用的操作命令行來做引申講解,有興趣的朋友可以到google官網(wǎng)繼續(xù)學(xué)習(xí)。


常用命令行.png

基本語法如下:

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)論

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,048評(píng)論 25 709
  • 簡(jiǎn)介 Monkey 是Android SDK提供的一個(gè)命令行工具, 可以簡(jiǎn)單,方便地運(yùn)行在任何版本的Android...
    我為峰2014閱讀 3,725評(píng)論 0 10
  • Monkey概念介紹 Monkey是猴子的意思。Monkey測(cè)試,就像一只猴子,在電腦面前,亂敲鍵盤在測(cè)試。猴子什...
    正規(guī)程序員閱讀 3,876評(píng)論 0 50
  • 走在并不寬敞的路上,一對(duì)夫婦抱著孩子慢慢地往前晃悠,我在后面跟著想快也快不了,好容易瞅到一個(gè)機(jī)會(huì),一個(gè)側(cè)身一個(gè)箭步...
    米安妮閱讀 242評(píng)論 0 0
  • 買菜回家的路上,我牽著兒子的小手小心翼翼地走在路邊,下班時(shí)間路上車比較多。避讓了一輛又一輛的小車后我們總算是走進(jìn)了...
    玉指ss閱讀 256評(píng)論 1 1

友情鏈接更多精彩內(nèi)容