APP測試之Monkey壓力測試

(一)Monkey簡介

Monkey意指猴子,頑皮淘氣。所以Monkey測試,顧名思義也就像猴子一樣在軟件上亂敲按鍵,猴子什么都不懂,就愛搗亂。

Monkey 是 Android SDK 自帶的命令行工具,它通過向系統發送偽隨機的用戶事件流(如點擊、滑動、按鍵等),對正在運行的應用程序進行壓力測試。

Monkey 測試的核心原理基于 Android 系統的事件驅動機制。它生成的事件被發送到系統的事件隊列中,然后由系統分發到相應的應用程序。這些隨機事件的組合模擬了用戶在使用應用時可能進行的各種操作,以此來檢測應用在不同操作序列下的表現。

Monkey包括許多選項,它們大致分為四大類:

(1)基本配置選項,如設置嘗試的事件數量;

(2)運行約束選項,如設置只對單獨的一個包進行測試;

(3)事件類型和頻率;

(4)調試選項;

(二)Money原理

在Monkey運行的時候,它生成事件,并把它們發給系統。同時,Monkey還對測試中的系統進行監測,對下列三種情況進行特殊處理(自動停止):

(1)如果限定了Monkey運行在一個或幾個特定的包上,那么它會監測試圖轉到其它包的操作,并對其進行阻止;

(2)如果應用程序崩潰或接收到任何失控異常,Monkey將停止并報錯;

(3)如果應用程序產生了應用程序不響應(application not responding)的錯誤,Monkey將會停止并報錯;

按照選定的不同級別的反饋信息,在Monkey中還可以看到其執行過程報告和生成的事件。

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

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

(3)通過在cmd窗口中執行: adb shell monkey {+命令參數}來進行Monkey測試;

(三)Monkey命令詳解

首先我們需要有adb工具,如果沒有可以參考?ADB環境配置?,完成工具安裝,熟悉操作環境。

首先,我們需要先知道待測APP的包名,我們可以直接使用adb命令獲取包名,先打開進入需要獲取包名的APP,再輸入命令:

adb shell
dumpsys activity | grep mFocus

基本語法:

adb shell monkey [options] <event-count>

  • ?adb shell:進入設備shell
  • monkey:啟動Monkey工具
  • [options]:配置參數
  • <event-count>:事件數量(如10000)

常用參數說明:

參數說明示例
-p <包名>指定測試的應用包名-p com.android.settings
-s <種子>指定隨機數種子,便于復現問題-s 123
--throttle <毫秒>設置事件時間間隔--throttle 500
-v / -vv / -vvv設置日志詳細程度(最多三級)-vvv
--ignore-crashes忽略崩潰繼續執行--ignore-crashes
--ignore-timeouts忽略ABR錯誤繼續執行--ignore-timeouts
--monitor-natvie-crashes監控native層崩潰--monitor-native-crashes
--pct-touch <百分比>設置觸摸事件比例--pct-touch 50
--pct-motion <百分比>設置滑動事件比例--pct-touch 30
--pct-appswitch <百分比>設置應用切換事件比例--pct-appswitch 10
--pct-rotation <百分比>設置屏幕旋轉事件比例--pct-rotation 5
--bugreport自動生成bugreport日志--bugreport
> log.txt將日志輸出到文件> /sdcard/monkey_log.txt

示例命令:

adb shell
monkey -p com.android.settings --throttle 500 -v -v -v --ignore-crashes --ignore-timeouts --pct-touch 50 -pct-motion 30 10000 > /sdcard/monkey_log.txt

含義:對 com.android.settings 執行10000次monkey測試,事件間隔500ms,日志詳細,忽略奔潰與超時,觸摸事件占50%,滑動事件占30%,并將日志保存為/sdcard/monkey_log.txt文本

注意:adb shell進入后,只能讀取到設備的文件路徑,例如/sdcard/

如果是adb shell monkey -p?com.android.settings -v 10000 >?F:\monkey_log.txt? 就可以訪問本電腦路徑,將log直接保存到本電腦

(四)應用場景

1. App穩定性測試(壓力測試)

目的: 模擬用戶連續操作,驗證App是否會崩潰、閃退或無響應

應用場景:

  • App發布前的穩定性驗證
  • 回歸測試階段,確保舊功能未被新版本影響
  • 夜間持續運行Monkey,觀察長時間運行后的表現

示例命令:

adb shell monkey -p com.exmaple.app --throttle 300 -v -v -v 10000

每300ms發送一次事件,共10000次,記錄詳細日志

2. Bug復現與定位

目的:通過設置相同的隨機種子,復現Monkey觸發的異常

應用場景:

  • 某次Monkey測試發現崩潰,需復現問題
  • 開發修復后,驗證是否已解決

示例命令:

adb shell monkey -p com.example.app -s 1752714219455 -v -v -v 10000

使用種子 1752714219455 復現崩潰場景

3. 整機穩定性測試

目的:測試系統級穩定性,包括多App切換、系統按鍵響應等

應用場景:

  • Android系統ROM測試
  • 智能硬件整機測試(如電視盒子、車載設備)

示例命令:

adb shell monkey --pct-syskeys 20 --pct-appswitch 30 -v 1000

增加系統按鍵和App切換事件比例,模擬整機使用場景

4. 安全性與異常處理測試

目的:驗證App在權限異常、奔潰、ANR等情況下的處理能力

應用場景:

  • 檢查是否有未捕獲異常
  • 驗證ANR彈窗是否出現
  • 測試App是否能恢復運行

示例命令:

adb shell monkey -p com.example.app --ignore-crashes --ignore-timeouts --monitor-native-crashes -v 10000

即使發生崩潰或者ANR,Monkey繼續執行,便于收集更多異常

5. CI自動化集成測試

目的:將Monkey測試集成到持續集成流程,定期執行穩定性驗證

應用場景:

  • 每次構建后自動執行Monkey測試
  • 結合logcat分析異常日志
  • 自動生成測試報告

示例命令:

adb shell monkey -p com.example.app --throttle 500 -s 2025 -v 10000 >/sdcard/monkey_log.txt

將日志輸出到設備,供后續分析

(五)實戰演練

這是我輸入monkey -p com.android.settings -v 10000 進行monkey的測試結果

這段日志表明 Monkey 測試異常終止,核心信息是 “系統在執行到第 9647 個事件時崩潰”,具體分析如下:

1. 關鍵日志解讀

  • Monkey aborted due to error:Monkey 測試因錯誤強制終止,未完成預設的 10000 個事件。
  • Events injected: 9647:實際成功注入 9647 個事件,距離目標 10000 個僅差 353 個。
  • System appears to have crashed at event 9647:崩潰發生在第 9647 個事件,且可能是系統級崩潰(而非單一應用崩潰)。
  • seed 1752714219455:測試使用的隨機數種子,可用于復現崩潰場景(用相同種子重新執行命令,大概率會在同一事件序列觸發崩潰)。
  • elapsed time=267988ms:測試總耗時約 268 秒(4 分 28 秒),平均每個事件間隔約 27.8 毫秒(若未設置--throttle,Monkey 會以最快速度發送事件)。

2. 崩潰原因分析

(1)系統級崩潰

  • 表現:日志明確提到 “System appears to have crashed”,說明不是單一應用(如com.android.settings)崩潰,而是整個 Android 系統出現嚴重錯誤(如進程卡死、內存溢出、內核 panic 等)。
  • 可能誘因
    • 連續高頻率事件導致系統資源耗盡(CPU 100%、內存溢出)。
    • 某一事件觸發了系統底層漏洞(如框架層代碼缺陷、驅動兼容性問題)。
    • 設備硬件限制(如低端設備無法承受密集事件壓力)。

(2)Monkey 自身限制

  • 若測試中涉及跨應用操作(即使指定了-p包名,某些系統事件仍可能觸發其他應用),可能導致 Monkey 無法處理的異常。
  • 部分定制 ROM(如廠商修改的系統)對 Monkey 支持不佳,密集事件可能觸發系統保護機制(如 watchdog 超時)。

(3)事件序列沖突

  • 第 9647 個事件可能是一個特殊操作組合(如連續快速點擊 + 旋轉屏幕 + 按鍵),觸發了系統未處理的邊緣場景(如 UI 線程阻塞、資源競爭死鎖)。

3. 復現與排查建議

(1)復現崩潰場景

使用相同種子重新執行測試,確認是否穩定復現:

adb shell monkey -p com.android.settings -s 1752714219455 -v -v 10000
  • 若復現,說明是確定性問題(與事件序列強相關)。
  • 若偶爾出現,可能是偶發的資源競爭問題。

(2)收集系統崩潰日志

  • 測試時同時記錄logcat系統日志,捕獲崩潰瞬間的堆棧信息:
adb shell logcat -v time > crash_log.txt  # 實時保存日志
  • 重點查找關鍵字:
    • AndroidRuntime: FATAL EXCEPTION(應用崩潰)
    • ANR in(應用無響應)
    • kernel: panic(內核崩潰)
    • Watchdog: *WATCHDOG*(系統 watchdog 超時,通常是嚴重阻塞)

4. 總結

????????此問題的核心是密集事件觸發了系統級崩潰,需通過相同種子復現問題,結合logcat抓取崩潰堆棧,定位具體是系統資源耗盡、代碼漏洞還是硬件限制導致。通過降低事件頻率、優化事件類型,可臨時規避這個問題

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89177.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89177.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89177.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

時序大模型為時序數據庫帶來的變革與機遇

時序數據&#xff08;Time Series Data&#xff09;作為記錄系統狀態隨時間變化的重要數據類型&#xff0c;在物聯網、金融交易、工業監控等領域呈爆炸式增長。傳統時序數據庫專注于高效存儲和查詢時序數據&#xff0c;而時序大模型&#xff08;Time Series Foundation Models&…

深入核心:理解Spring Boot的三大基石:起步依賴、自動配置與內嵌容器

深入核心&#xff1a;理解Spring Boot的三大基石&#xff1a;起步依賴、自動配置與內嵌容器 摘要&#xff1a;在上一章&#xff0c;我們領略了Spring Boot帶來的革命性開發體驗。但魔法的背后&#xff0c;必有其科學的支撐。本章將帶你深入Spring Boot的內核&#xff0c;系統性…

達夢數據庫配置兼容MySQL

前言 作為一名數據庫管理員或開發者&#xff0c;當項目需要從MySQL遷移到達夢數據庫時&#xff0c;最關心的莫過于兼容性問題。達夢作為國產數據庫的佼佼者&#xff0c;提供了良好的MySQL兼容模式&#xff0c;今天我就來分享一下如何配置達夢數據庫以實現對MySQL的兼容。 一、為…

js與vue基礎學習

vue創建項目 安裝node安裝node、npm、cnpm node -v npm -v #npm服務器位置處于國外&#xff0c;下載包的速度會比較緩慢。阿里為國內用戶提供的cnpm&#xff0c;他是npm的鏡像&#xff0c;下載第三方包時&#xff0c;們完全可以使用cnpm來替代npm。 cnpm -v在node中執行JavaScr…

【開源.NET】一個 .NET 開源美觀、靈活易用、功能強大的圖表庫

文章目錄一、項目介紹二、適用場景三、功能模塊四、功能特點五、效果展示六、開源地址一、項目介紹 LiveCharts2 是一個開源、簡單、靈活、交互式且功能強大的 .NET 圖表庫。LiveCharts2 現在幾乎可以在任何地方運行&#xff1a;Maui、Uno Platform、Blazor-wasm、WPF、WinFor…

使用Whistle自定義接口返回內容:Mock流式JSON數據全解析

一.mock接口返回數據流程 定位目標接口 在Whistle的Network面板中找到需要Mock的接口&#xff0c;右鍵點擊請求信息&#xff0c;選擇COPY -> URL復制完整URL&#xff0c;確保URL路徑精確到具體接口。準備Mock數據 點擊對應接口&#xff0c;在右側面板切換到response標簽頁&a…

【前端】富文本編輯器插件 wangEditor 5 基本使用(Vue2)

https://www.wangeditor.com/v5 一、安裝 首先安裝editor yarn add wangeditor/editor # 或者 npm install wangeditor/editor --save安裝Vue2組件 yarn add wangeditor/editor-for-vue # 或者 npm install wangeditor/editor-for-vue --save或者Vue3 yarn add wangeditor/…

自適應哈希索引 和 日志緩沖區

目錄 1. 自適應哈希索引在內存中的位置 2. 自適應哈希索引的作用 3. 為什么要創建自適應哈希索引 4. 適應哈希索引的Key -Value如何設置&#xff1f; 5. 日志緩沖區在內存中的位置 6. 日志緩沖區的作用 7. 日志不通過LogBuffer直接寫入磁盤不行嗎&#xff1f; 1. 自適應哈…

中國旅行社協會在京召開“文旅人工智能應用研討會”,助力文旅創新發展

7月15日&#xff0c;由中國旅行社協會數字經濟專業委員會和在線旅行服務商分會聯合主辦的“人工智能技術在文旅產業中的應用”研討會在北京舉行。中國旅行社協會副會長、秘書長孫桂珍出席并致辭&#xff0c;中國工程院外籍院士、具身智能機器人專家張建偉、北京第二外國語學院旅…

Linux之Zabbix分布式監控篇(一)

一、概念和特點概念Zabbix是一款開源、免費的監控軟件 主要用于7*24*365實時監控網絡設置&#xff0c;操作系統&#xff0c;應用程序&#xff0c;網絡帶寬等資源的運行狀態&#xff0c;并且一旦發生異常能夠第一時間個SA管理員發送報警信息特點Zabbix是c/s結構&#xff0c;有c…

ZYNQ千兆光通信實戰:Tri Mode Ethernet MAC深度解析

—— 從硬件設計到Linux驅動的光通信創新實踐** 當ZYNQ遇上光通信 在工業控制、醫療成像和航空航天等領域,抗干擾、長距離傳輸的光通信技術至關重要。Xilinx ZYNQ-7000系列憑借ARM+FPGA的架構,結合Tri Mode Ethernet MAC (TEMAC) 核心,為千兆光通信提供了完美解決方案。本文…

求不重疊區間總和最大值

例題鏈接&#xff1a;1051-習題-數學考試_2021秋季算法入門班第一章習題&#xff1a;模擬、枚舉、貪心 來源&#xff1a;牛客網 時間限制&#xff1a;C/C/Rust/Pascal 1秒&#xff0c;其他語言2秒 空間限制&#xff1a;C/C/Rust/Pascal 32 M&#xff0c;其他語言64 M 64bit …

【Golang】GORM - GEN工具 快速開始

文章目錄建項目建庫建表main.gouser.gocompany.go生成效果&#xff08;更進一步&#xff09;自定義dynamic SQL實踐官方地址&#xff1a;https://gorm.io/zh_CN/gen/index.html 以mysql為例 建項目 go mod init 項目名稱 go mod tidy建庫建表 建數據庫demo&#xff0c;正常…

飛書 “打破” AI 與協同辦公的「黑箱」

文 | 智能相對論作者 | 陳泊丞在協同辦公領域&#xff0c;自從有了AI&#xff0c;微軟、釘釘、Google Workspace、Salesforce、企業微信、飛書等廠商都試圖通過深度整合AI技術&#xff0c;從智能會議、內容創作、數據管理等場景重構辦公范式。微軟通過Microsoft 365 Copilot將A…

leetcode:674. 最長連續遞增序列[動歸]

學習要點 練習動歸注意不要馬虎 題目鏈接 674. 最長連續遞增序列 - 力扣&#xff08;LeetCode&#xff09; 題目描述 解法&#xff1a;動歸 class Solution { public:int findLengthOfLCIS(vector<int>& nums) {int n nums.size();if(nums.size() < 1) …

【html常見頁面布局】

考拉商城界面效果htmlcss效果 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</ti…

摩爾線程MUSA架構深度調優指南:從CUDA到MUSA的顯存訪問模式重構原則

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;H卡級別算力&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生專屬優惠。 當國產GPU面臨生態壁壘&#xff0c;顯存訪問效率成為性能突破的關鍵戰場。本文將深入揭示摩爾…

2025江蘇省信息安全管理與評估賽項二三階段任務書

任務 3 網絡安全事件響應、數字取證調查、網絡安全滲透任務3.1&#xff1a;網絡安全事件響應&#xff08;100分&#xff09;X集團的一臺存儲關鍵信息的服務器遭受到了黑客的攻擊&#xff0c;現在需要你對該服務器進行應急排查&#xff0c;該服務器的系統目錄被上傳惡意文件&…

核電概念盤中異動,中核科技漲停引領板塊熱度

今日股市交易時段&#xff0c;核電概念板塊表現活躍&#xff0c;中核科技強勢漲停&#xff0c;成為市場關注焦點&#xff0c;為核電產業鏈相關投資與發展增添新的動態信號。中核科技作為核電閥門等關鍵設備領域的重要企業&#xff0c;其漲停背后&#xff0c;是多重因素共同作用…

《Java語言程序設計》1.2.3復習題

縮寫"CPU"代表什么含義?測量CPU速度的單位是什么?中央處理器(Central Processing Unit,CPU)是計算機的大腦。它從內存中獲取指令并執行這些指令。CPU通常由兩部分組成&#xff1a;控制單元(control unit)和算術/邏輯單元(arithmetic/logic unit)。控制單元用于控制…