一文徹底搞懂App的Monkey穩定性測試

2021-12-23 自動化軟體測試

Monkey程序由Android系統自帶,使用Java語言寫成,在Android文件系統中的存放路徑是:/system/framework/monkey.jar

Monkey.jar程序是由一個名為「monkey」的Shell腳本來啟動執行,shell腳本在Android文件系統中的存放路徑是:/system/bin/monkey

Monkey 命令啟動方式:

可以通過PC機CMD窗口中執行: adb shell monkey {+命令參數}來進行Monkey測試 

在PC上adb shell 進入Android系統,通過執行monkey {+命令參數} 來進行Monkey 測試 

在Android機或者模擬器上直接執行monkey 命令,可以在Android機上安裝Android終端模擬器

Monkey雖然可以根據一個指定的命令腳本發送按鍵消息,但不支持條件判斷,不支持讀取待測界面的信息來執行驗證操作

那麼這個option通常又分為4大類:

1、常用選項的參數通常有:

示例Level0:

adb shell monkey -p com.swartz.cicada –v 100

說明:預設值,僅提供啟動提示、測試完成和最終結果等少量信息 相應原始碼如圖所示了,這十分有利於調試了

示例Level1:

adb shell monkey -p com.swartz.cicada -v-v 100

說明:提供較為詳細的日誌,包括每個發送到Activity的事件信息

示例Level2:

adb shell monkey -p com.swartz.cicada -v-v-v 100

說明:最詳細的日誌,包括了測試中選中/未選中的Activity信息

2、時間選項的參數通常有:

示例:

Monkey測試1:adb shell monkey -p com.swartz.cicada –s 10 100

Monkey 測試2:adb shell monkey -p com.swartz.cicada –s 10 100

兩次測試的效果是相同的,因為模擬的用戶操作序列(每次操作按照一定的先後順序所組成的一系列操作,即一個序列)是一樣的。操作序列雖然是隨機生成的,但是只要我們指定了相同的Seed值,就可以保證兩次測試產生的隨機操作序列是完全相同的,所以這個操作序列偽隨機的;

3、約束選項的參數通常有:

4、調試選項的參數通常有:

--dbg-no-events:初始化啟動的activity,但是不產生任何事件。

--hprof:指定該項後在事件序列發送前後會立即生成分析報告

--ignore-crashes:忽略崩潰

--ignore-timeouts:忽略超時

--ignore-security-exceptions:忽略安全異常

--kill-process-after-error:發生錯誤後直接殺掉進程

--monitor-native-crashes:跟蹤本地方法的崩潰問題

工作中為了保證測試數量的完整進行,我們一般不會在發生錯誤時立刻退出壓力測試。

monkey 測試命令如下:

adb shell monkey -p com.swartz.cicada -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 10000 > E:\monkey_log\20170831.txt

adb shell monkey -p com.tpnet.hlquery --throttle 100--pct-touch 50 --pct-motion 50 -v -v -v 1000 >c:\monkeytest.txt

測試com.tpnet.hlquery這個app,間隔100毫秒,50%的觸摸事件,50% 的滑動事件,三個-v輸出詳細的日誌,執行1000個事件,日誌輸出到c:\monkeytest.txt

ps: 命令運行前手機先解鎖,win8 以上要用管理員身份打開cmd

1、初步分析方法:

Monkey: seed=20 count=100  --隨機種子和運行次數

:AllowPackage: com.swartz.cicada  --指定的測試包
:IncludeCategory: android.intent.category.LAUNCHER  --Category包含LAUNCHER
:IncludeCategory: android.intent.category.MONKEY   --Category包含MONKEY

// Selecting main activities from category android.intent.category.LAUNCHER
//   + Using main activity com.swartz.cicada.LauncherActivity (from package com.swartz.cicada)
// Selecting main activities from category android.intent.category.MONKEY  --查詢結果列表
// Seeded: 20 --隨機種子

// Event percentages:
//  15.0%  --事件0 為touch事件,就是相當於按下之後彈起來的一個動作
//  10.0%  --事件1 為motion,相當於說從起始點到終點有移動了多少步,就是步驟數量 
//  2.0%   --事件2 為pinchzoom,為兩個手指有同時按下去後,都向中間移動後up起來,相當於一個縮放的動作。
//  15.0%  --事件3 為trackball,為軌跡球事件 
//  -0.0%  --事件4 為rotation 為屏幕旋轉百分比隱藏事件
//  25.0%  --事件5 為nav導航事件,就是上下左右
//  15.0%  --事件6 為majornav主導航事件,會產生一些窗口的事件
//  2.0%   --事件7 為系統按鍵
//  2.0%   --事件8,app應用的打開就是用的這個事件
//  1.0%   --事件9,鍵盤的開,關

//  13.0% --事件10,按鍵按下在彈起等動作


日誌結尾:

如果Monkey測試順利執行完成,在log的最後,會列印出當前執行事件的次數和所花費的時間;Monkey
finished代表執行完成。

(如果Monkey執行中斷,在log的最後也能查看到當前已執行的次數。)

2、詳細分析:

Monkey測試出現錯誤之後,一般的分析步驟分為以下幾種: 

看Monkey日誌(注意第一個switch以及異常信息等) 

程序無響應問題,在日誌中搜索 「ANR」

奔潰問題: 在日誌中搜索 「Exception」

ANR問題:在日誌中搜索「ANR」(什麼是ANR:Application Not Responding,即應用無響應,具體有關ANR的知識詳見:):https://www.tuicool.com/articles/IfQvY3

ForceClosed和程序異常退出問題:在日誌中搜索「致命」 

3、查看Monkey裡面錯誤前的一些事件動作,並手動執行該動作

如果Monkey測試順利執行完成,在log的最後,會列印出當前執行事件的次數和所花費的時間; // Monkey finished代表執行完成。 

Monkey執行中斷,在log的最後也能查看到當前的已經執行的次數。


怎麼樣去確定內存洩漏?

1. 內存洩漏彈出out of memory對話框

2. 對於有內存洩漏但是沒有單出out of memory對話框的情況,可以通過logcat文件GC出信息,(GC:java的垃圾回收機制)

GC_FOR_ALLOC: 因為在分配內存時候內存不夠引起的

GC_EXPLICIT 表明GC被顯式請求觸發的,如System.gc調用,

GC_CONCCURRENT: 表明GC在內存使用率達到一定的警戒值時候,自動觸發

GC_BEFORE_OOM 表明在虛擬機拋出內存不夠異常oom之前,執行最後一次回收內存垃圾

adb shell monkey -p com.tpnet.hlquery --hprof --throttle 100 --pct-touch 50 --pct-motion 50 -v -v -v 1000 >c:\monkeytest.txt

如果指定了這個選項,monkey會在發送事件的前後生成app內存快照文件,一般會在設備的/dada/misc目錄下生成hprof文件(ps: /data/misc/需要root權限)

拖進AndroidStudio即可查看

Monkey script是按照一定語法規則編寫有序的用戶事件流並且適用於monkey命令工具的腳本,可以用txt寫。

腳本編寫完畢放入手機的sdcard目錄下,cmd中運行命令

adb shell monkey -f/sdcard/腳本名字 運行次數

結合monkey的-v和–hhprof輸出日誌和性能報告

adb shell monkey --hprof -f/sdcard/*.txt -v -v -v 3 > c:\monkey.txt

一些腳本命令:

start data>> 
將控制 monkey 的一些參數設置和具體的 monkey 命令分隔開來

LaunchAcitivity(pkg_name, cl_name) 
啟動任意應用的一個活動(界面) 
pkg_name:要啟動的應用包名 
cl_name:要打開的活動的類名

DispatchPointer(downTime,eventTime,action,x,y,pressure,size,metaState,xPrecision,yPrecision,device,edgeFlags) 
向一個指定位置發送單個手勢消息 
downTime: 發送消息的時間,只要是合法的長整型數字即可 
eventTime: 主要是用在指定發送兩個事件之間的停頓 
action: 消息是按下還是抬起,0表示按下,1表示抬起 
x:x 坐標 
y:y 坐標 
其餘 7 個參數均可以設置為 0

模版:

count = 1       // 下面這個 count 選項, monkey 並沒有用到,可以忽略它

speed = 1.0    //speed  選項是用來調整兩次按鍵的發送瀕率的start data >>   // 「start data >>」 是 有 大小寫敏感的,而且單詞間的間隔只用有一個空格!LaunchActivity(com.zhengping.contact, com.zhengping.contact.Main)     //# Activity 值可以通過 aapt 命令查看DispatchPointer(5109520,5109520,0,261,128,0,0,0,0,0,0,0);DispatchPointer(5109521,5109521,1,261,128,0,0,0,0,0,0,0);UserWait(2000)    // 停頓時間
DispatchPress (KEYCODE_Z)    // 文字輸入 monkey 只識別英文和數字輸入

學習安排上!

▲  助力千萬測試人員 ▲  

免費領Python+Java雙語視頻

關注下方公眾號免費領取

    不想錯過就把我們設為星標吧!

第一步:點擊頂部藍字「自動化軟體測試」,進入公眾號主頁

第二步:點擊右上角「···」

第三步:點擊「設為星標」

轉載自:http://navo.top/BVJZ3a

 「在看」點一點 

心中有光萬物明朗😁

👇👇👇

相關焦點

  • APP測試必備技能-玩轉monkey(一)
    cmd窗口中執行: adb shell monkey {+命令參數}來進行Monkey測試;在Monkey運行的時候,它會生成事件,並把它們發給系統。同時,Monkey還對測試中的系統進行監測,對下列三種情況進行特殊處理:(1)如果限定了Monkey運行在一個或幾個特定的包上,那麼它會監測試圖轉到其它包的操作,並對其進行阻止;(2)如果應用程式崩潰或接收到任何失控異常,Monkey將停止並報錯;(3)如果應用程式產生了應用程式不響應ANR(application not
  • APP測試之Monkey壓力測試(一)
    需要知道待測試app的包名,可以通過使用「uiautomatorviewer.bat」工具來獲取,也可以直接詢問提供app的開發小哥哥,或者直接使用adb命令獲取包名。方法一:首先要先打開手機中需要獲取包名的app,然後分別輸入命令即可。adb shelldumpsys activity | grep mFocusedActivity如圖所示:
  • 網際網路測試必須要知道的App穩定性測試
    App穩定性測試穩定性測試就是指軟體長時間的持續運行,系統版本是否穩定,是否能否持續的為用戶提供服務。
  • Android穩定性測試利器-Monkey介紹及環境配置
    一、什麼是MonkeyMonkey是Android中的一個命令行工具,可以運行在Android模擬器或手機設備中。
  • APP測試之Monkey壓力測試(二)
    導航事件來自方向輸入設備的up、down、left、right組成);[--pct-majornav PERCENT] -4.主要導航事件(引發圖形界面動作,如回退、菜單按鍵);[--pct-syskeys PERCENT] -5.系統按鍵事件(這些按鍵通常被保留,由系統使用,如Home、Back、Start Call、End Call及音量控制鍵);[--pct-appswitch
  • 安卓APP測試之Monkey測試
    1、運行時機:一般是產品穩定後 首輪功能測試完成的夜間進行  2、需要知道packageName  3、目的:主要測試產品是否存在崩潰問題和ANR問題。  4、 --pct-nav (導航事件 up/down/left/right)  5、 --pct-majornav (主要導航事件 back key 、 menu key)  6、 --pct-syskeys (系統按鍵事件 Home 、Back 、startCall 、 endCall 、 volumeControl)  7、 --pct-appswitch
  • APP穩定性測試神器Monkey全解析
    您可以使用 Monkey 以隨機且可重複的方式對正在開發的應用進行壓力測試。Monkey是一個命令行工具,可以在任何模擬器實例或設備上運行。它會將偽隨機用戶事件流發送到系統中,從而對您正在開發的應用軟體進行壓力測試。Monkey包含許多選項,主要分為以下四個類別:基本配置選項,例如設置要嘗試的事件數。
  • ADB-monkey測試
    Monkey測試:adb shell monkey 100獲取包:adb logcat |grep START   或adb logcat | findstr START   基本參數:如果用相同的seed值再次運行monkey,它將生成相同的事件序列。
  • 在Windows上一鍵啟動IOS穩定性測試
    本內容由以下幾部分組成:iOS Monkey介紹工具介紹環境搭建代碼實現
  • Monkey 的基本用法
    Monkey 將允許系統啟動所有軟體包中的 ActivityC:\Users\feng01>adb shell monkey -v 50-v參數:詳細信息-> 級別0 (默認值)C:\Users\feng01>adb shell monkey -p ims2.xz.aut -v 50-v參數:詳細信息-> 級別1C:\Users\feng01>adb shell monkey -p ims2.xz.aut -v -v 50
  • app測試系列:ADB常用的指令詳解
    目錄找到app包名adb shell,進入交互底層,進入data目錄中app文件夾裡面:cd /data/app/使用以下命令進行報名查看adb shell pm list package11.2.執行命令卸載軟體adb uninstall  軟體包名
  • 從無到有,徹底搞懂MOSFET講解(十二)
    可以通過理論去計算,但是不準,實際情況需要通過波形測試進行計算。我們這裡先定性,不定量。定性:假設電流很小時,開關損耗比重大,哪個管子載波哪個管子熱;續流損耗大於導通損耗;假設電流很大時,續流損耗大,哪個管子載波它的對應同一個橋臂的另外一個管子就熱;開關損耗佔比相對較小;哪個管子恆通,則相應的導通損耗最小。
  • APP測試之使用ADB可能遇到的錯誤及解決辦法
    52次推文解決方法:1、如果用手機設備測試,請用USB數據線與電腦連接,同時安裝好手機驅動(比如91助手、豌豆莢);2、如果採用模擬器測試,應該先啟動eclipse,然後設置好模擬器,並進入模擬器測試狀態,如下圖所示:
  • APP測試流程
    4)上線報告所包含的內容為:---對當前版本質量進行分級;---附上測試報告(功能測試報告、兼容性測試報告、性能測試報告以及app可用性能標準結果);--總結上線版本的基本情況。若有遺留問題必須列出並記錄解決方案。
  • APP測試工程師「養成」記(三)
    APP測試主要測試內容如下: 一、冒煙測試1.monkey2.模糊測試3
  • Altizure地面站APP測試報告
    一、測試環境無人機型號:DJI Phantom 4平板型號:iPad mini 4平板系統:IOS 10.2.1APP版本號: V2.4.3二、軟體價格數據採集模塊3.安全穩定性:預計飛行時間:支持根據規劃航線預計飛行時間(機友需在規劃航線時,應考慮電池耗損情況,留有一定裕度。預計飛行時間=官網標稱最大飛行時間-安全裕度),並可計算測區總面積。
  • 安卓測試常用的 ADB 命令大全,非常全!
    查看應用內存佔用,耗電信息,啟動時間,wakelock,跑monkey的命令在之前的應用性能優化中起了不小的作用。以下adb命令的測試機器為小米3,其中package_name代表包名。>package:/data/app/com.tencent.test-1/base.apk5、查看apk的版本信息adb shell dumpsys package <package_name> | grepversion如果你得到的是下圖的兩個version版本,則為系統app,下面是系統app本身的版本,上面是升級之後的系統app的版本信息
  • Y-平衡測試—動態穩定性測試
    Y-平衡測試的目的是個人的動態穩定性和不對稱的平衡控制情況下,神經對肌肉的控制能力,在三個方向(前側,後內側,外側)的最大能力伸展測試
  • 一文搞定前端自動化測試(React 實戰)
    準備工作方法一強烈建議大家跟著方法一一步一步搭建好我們的實戰環境!npm install create-react-app -gcreate-react-app jest-react --template-typescript創建好項目後,就可以開始嘗試一下自動化測試和 React 的結合的神奇效果了!