App測試之Monkey壓力測試

2021-02-20 軟體測試大本營

(一)Monkey簡介

Monkey意指猴子,頑皮淘氣。所以Monkey測試,顧名思義也就像猴子一樣在軟體上亂敲按鍵,猴子什麼都不懂,就愛搗亂。Monkey原理也是類似,通過向系統發送偽隨機的用戶事件流(如按鍵輸入、觸控螢幕輸入、滑動Trackball、手勢輸入等操作),來對設備上的程序進行壓力測試,檢測程序多久的時間會發生異常,在功能測試完成後進行monkey測試。

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

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

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

(3)事件類型和頻率;

(4)調試選項;

總結:Monkey測試用於發現App測試中的問題(如ANR(Application Not Responding),響應延時以及CRASH,非正常退出)

(二)Money原理

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

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

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

(3)如果應用程式產生了應用程式不響應(application notresponding)的錯誤,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測試;

 

(三)Money架構

Monkey 運行在設備或模擬器上面,可以脫離PC運行(普遍做法是將monkey作為一個像待測應用發送 隨機按鍵消息的測試工具。驗證待測應用在這些隨機性的輸入面前是否會閃退或者崩潰)

 

(四)Money參數大全

Event percentages(事件百分比):

0:點擊事件百分比,即參數--pct-touch

1:滑動事件百分比,即參數--pct-motion

2:縮放事件百分比,即參數--pct-pinchzoom

3:軌跡球事件百分比,即參數--pct-trackball

4:屏幕旋轉事件百分比,即參數--pct-rotation

5:基本導航事件百分比,即參數--pct-nav

6:主要導航事件百分比,即參數--pct-majornav

7:系統按鍵事件百分比,即參數--pct-syskeys

8:Activity啟動事件百分比,即參數--pct-appswitch

9:鍵盤喚出隱藏事件百分比,即參數--pct-flip

10:其他事件百分比,即參數--pct-anyevent

 

(五)Money命令詳解

關於環境,我們已經在之前搭建好了,在cmd中輸入:adb devices

出現下面信息,表示環境是ok的。(首先確保環境沒問題才能執行其他命令)

要測試App的穩定性,首先要獲取到要測試的App的包名。在工作中可以直接問開發索取包名,或者根據經驗自己輸入命令查找包名也行。

方法1:

獲取所有包名:

adb shell pm list package

獲取第三方包名:

adb shell pm list package -3

方法2:獲取包名和activity

adb logcat | findstr START

輸入該命令,然後點擊要啟動的app,即可獲取到包名和activity

之後輸入一些Monkey命令,就可以開始測試。

//獲取Monkey命令自帶的幫助,在cmd中執行命令:

adbshell monkey -help

//指定一個包讓Monkey程序模擬100次隨機用戶事件

adb shell monkey -pcom.sf.DarkCalculator100

說明:參數-p用於約束限制,用此參數指定一個或多個包(即App)。指定包之後,Monkey將只允許系統啟動指定的APP;如果不指定包,Monkey將允許系統啟動設備中的所有APP,com.sf.DarkCalculator為包名,100是事件計數。

//指定日誌級別Level 0

adb shell monkey -p com.sf.DarkCalculator –v 100

說明:日誌級別用於指定反饋信息級別(信息級別就是日誌的詳細程度),日誌級別 Level 0 ,僅提供啟動提示、測試完成和最終結果等少量信息。

/指定日誌級別Level 1

adb shell monkey -p com.sf.DarkCalculator –v -v100

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

//指定日誌級別Level 2

adb shell monkey -p com.sf.DarkCalculator –v -v-v 100

說明:日誌級別 Level 2,提供最詳細的日誌,包括了測試中選中/未選中的Activity信息。

--throttle <毫秒>

用於指定用戶操作(即事件)間的時延,單位是毫秒;如果不指定這個參數,monkey會儘可能快的生成和發送消息。

//指定用戶操作(即事件)間的時延

adb shell monkey -p com.sf.DarkCalculator –-throttle 1000-v 100

說明:throttle單位是毫秒。

//調整觸摸事件的百分比

adb shell monkey -p com.sf.DarkCalculator --pct-touch10 -v1000

說明:--pct-{+事件類別}{+事件類別百分比}用於指定每種類別事件的百分比(在Monkey事件序列中,該類事件數目佔總事件數目的百分比),--pct-touch {+百分比}用於調整觸摸事件的百分比(觸摸事件是一個down-up事件,它發生在屏幕上的某單一位置)。

/調整動作事件的百分比

adb shell monkey -p com.sf.DarkCalculator --pct-motion20 -v1000

說明:調整動作事件的百分比(動作事件由屏幕上某處的一個down事件、一系列的偽隨機事件和一個up事件組成)。

//調整軌跡事件的百分比

adb shell monkey -p com.sf.DarkCalculator --pct-trackball30-v 1000

說明:調整軌跡事件的百分比(軌跡事件由一個或幾個隨機的移動組成,有時還伴隨有點擊)。

//調整「基本」導航事件的百分比

adb shell monkey -p com.sf.DarkCalculator --pct-nav40-v 1000

說明:調整「基本」導航事件的百分比(導航事件由來自方向輸入設備的up/down/left/right組成)。

//調整主要導航事件的百分比

adb shell monkey -p com.sf.DarkCalculator --pct-majornav50-v 1000

說明:調整主要導航事件的百分比(這些導航事件通常引發圖形界面中的動作,如:5-way鍵盤的中間按鍵、回退按鍵、菜單按鍵)。

//調整系統按鍵事件的百分比

adb shell monkey -p com.sf.DarkCalculator --pct-syskeys60 -v1000

說明:調整系統按鍵事件的百分比(這些按鍵通常被保留,由系統使用,如Home、Back、Start Call、EndCall及音量控制鍵)

//指定多個類型事件的百分比

adb shell monkey -p com.sf.DarkCalculator --pct-touch50 --pct-motion 50 1000

注意:各事件類型的百分比總數不能超過100%

//即使app崩潰,Monkey依然繼續發送事件,直到事件數目達到目標值為止

adb shell monkey -p com.sf.DarkCalculator  --ignore-crashes-v 1000

說明:用於指定當應用程式崩潰時(Force& Close錯誤),Monkey是否停止運行。如果使用--ignore-crashes參數,即使應用程式崩潰,Monkey依然會發送事件,直到事件計數達到1000為止。

//即使APP發生ANR,Monkey依然繼續發送事件,直到事件數目達到目標值為止

adb shell monkey -p com.sf.DarkCalculator  --ignore-timeouts-v 1000

說明:用於指定當應用程式發生ANR(ApplicationNo Responding)錯誤時,Monkey是否停止運行如果使用--ignore-timeouts參數,即使應用程式發生ANR錯誤,Monkey依然會發送事件,直到事件計數完成。

----

通過以上描述,我們了解了Monkey是什麼,Monkey是如何實現對APP進行壓力測試,也熟悉了Monkey基本的命令,今天將在之前的基礎上進行補充和拓展,一起深入接觸並掌握Monkey,這之後,我們還將總結APP測試常見問題!

Monkey參數的約束限制規範:

1.  一個 -p 選項只能用於一個包,指定多個包,需要使用多個 -p 選項;

2.-s <seed> 偽隨機數生成器的seed值,如果用相同的seed值再次運行monkey,它將生成相同的事件序列,對9個事件分配相同的百分比;

3.-v 命令行的每一個-v將增加反饋信息的級別:

Level 0為一個-v的命令,除了啟動的提示、測試完成和最終結果之外,提供較少的信息 ;Level 1為兩個-v的命令,提供較為詳細的測試信息,如逐個發送到Activity的事件 ;Level 2為三個-v的命令,提供更加詳細的測試信息,如測試中被選中或未被選中的Activity;

常見命令組合:

1.monkey -pcom.package -v 500 :簡單的輸出測試的信息;

2.monkey -pcom.package -v -v -v 500  :以深度為三級輸出測試信息;

3.monkey -pcom.package --port 埠號 -v :為測試分配一個專用的埠號,不過這個命令只能輸出跳轉的信息及有錯誤時輸出信息;

4.monkey -pcom.package -s 數字 -v 500 :為隨機數的事件序列定一個值,若出現問題下次可以重複同樣的系列進行排錯;

5.monkey -p com.package-v --throttle 3000 500 

:為每一次執行一次有效的事件後休眠3000毫秒;

 

Monkey測試參數建議

間隔時間:500毫秒;

種子數:隨機;

遇到錯誤:不停止;

執行時長:每機型不小於12小時或點擊次數:100萬次;

機型覆蓋建議:覆蓋高中低端機型

不同晶片平臺(高通、海思、MTK等)

不同解析度(480*800以上主流解析度)

不同安卓版本(安卓4.0以上主流安卓版本);

 

Monkey參考命令

adb shell monkey-p com.tencent.XXX(替換包名) --throttle 500 --ignore-crashes--ignore-timeouts --ignore-security-exceptions --ignore-native-crashes  -v -v -v 1000000>d:\monkeyScreenLog.log

 

測試可以發現的問題

Android平臺應用程式可能產生以下兩種問題:

1、Crash

2、ANR (響應延時)

 

Monkey日誌定位問題

1 .典型Monkey測試日誌文件輸出,如下:

//主要Log文件說明

anr目錄:從手機/data/anr導出的日誌,保存發生anr crash 時的相關信息;

 

2 .通過日誌定位問題步驟

(1)在MonkeyScreen.Log日誌文件搜索關鍵詞「Fatal」、「Crash」、「ANR」定位到發生Crash的詳細堆棧信息,或分析發生Crash前後的日誌事件;

如圖:

然後把相應的日誌發給開發即可。

相關焦點

  • Android手機App測試常用功能測試點
    退回:從其他程序退回時回到被測應用,被測應用打開其他應用再從桌面圖標啟動以上需要交叉組合測試。4.是否每個需要網絡請求的操作,都有做超時處理,並且測試出他的超時時間3. 檢查每一個需要網路請求的動作在網絡延遲,伺服器發生錯誤時,界面的響應monkey測試:1. 必跑monkey,不要僅跑一次,不要到測試後期才跑2.
  • 負載測試、容量測試、壓力測試、強度測試、性能測試的區別
    對於軟體測試初學者來說經常會弄不清負載測試、容量測試、壓力測試、強度測試、性能測試這幾種測試的區別,今天我們就來簡單的說明一下它們之間的區別
  • 心理壓力測試|如何面對壓力,釋放壓力
    中國科學院心理研究所的一項研究表明,20歲至30歲的人群精神壓力最高,年輕人群體成為各年齡段壓力之首。工作、買房、買車、婚戀…生活的每一面都令這一代的年輕人焦頭爛額,難有喘息的機會,也無法去追逐現實生活與休閒娛樂的平衡。不敢輕易換工作,不敢娛樂、旅遊,害怕銀行漲息,擔心生病、失業,更沒時間好好享受生活。
  • 在線教學app開發完成後,測試步驟有哪些?
    不論什麼軟體,在開發之後都需要進行測試,在線教學app開發也是如此,那麼在此項目完成後,需要怎樣的測試呢,測試步驟有哪些?大多數測試都是安排給非在線教學app開發人員來進行的,這樣做的目的是有助於確保更真實的測試體驗。一、功能測試在線教學app測試是確保功能按照要求的說明運行。通常,QA團隊將制定測試計劃,其中包含操作列表和所需的應用程式。
  • 心理測試:心理壓力測試量表,來看看你的壓力有多大!
    你有了解過當前心理壓力多大嗎?你對當前境況了解有多少呢?認知心理學家凱利認為,你對於當前心理壓力認知有多深刻,你就有多少機會讓自己擺脫壓力。從宏觀來講,壓力來自於兩方面:現實壓力;由現實問題所衍生出來的主觀情緒壓力。
  • 顯卡壓力測試工具 GpuTest for Mac
    GpuTest for Mac簡介 GpuTest是一個用戶界面友好的應用軟體,允許用戶對顯卡GPU進行OpenGL基準壓力測試。
  • 心理壓力測試
    人的心理壓力往往源於學習考試、職場競爭、事業挫折、戀愛交友、婚姻家庭或者突發事件等各種因素。壓力過大時,在生理、情緒、行為、精神等方面通常都會有某些明顯表現。2.    視頻:壓力大對健康產生諸多危害測測看自己的心理壓力到底有多大吧1. 下圖裡的橫線都是平行的!涉世越深的人,受社會侵蝕越嚴重,看到的直線越變形。你還是單純的你嗎?你能看出幾條筆直的橫線?2. 壓力測試,黑點多還是白點多?心理測試:心理壓力越大,黑色小點閃動得就越快,該死的小黑點還是安靜點吧!
  • appium混合app自動化測試實現——基於python語言
    現在混合app在非常常見,即一個app不僅僅含有原生的部分,還嵌入了h5網頁。最近用appium框架實現了對安卓混合app的測試,從原生切換到h5網頁,必須切換到相應的webview,踩了太多的坑,總結了一些經驗:要切換到webview,測試app一定是要打開debug模式的(Android開發人員在測試包中開啟Webview的debug模式就可以了)
  • 自來水壓力標準 自來水壓力如何測試
    近幾年來多數人都是著急購買房屋這件事情,事情辦理雖然說是很有必要的,但其實整件事情,有些地方也不能太過著急,若是很著急了,也必定就會遺漏掉一些點,而在水和電這兩個方面,更是不可以出現漏洞,好比是水壓,若是水壓不到位,可能日常生活也會無法保證,那麼自來水壓力標準?自來水壓力如何測試?
  • 薦讀:《壓力測試——對金融危機的反思》
    —— Game of Thrones突如其來的疫情就像一場全面的「壓力測試」。2020的艱難開局下,一些企業消失,一些企業被迫暫停業務仍在加速失血,還有一些企業雖然迎來了短期爆發增長,卻在巨大的需求壓力下勉力維持。但就像開篇提到的,「混亂是階梯。唯有這把階梯是真實的,攀爬則是其中的全部。」
  • 心理壓力測試,被壓力吞噬的年輕人,你該如何找到自己的出路?丨貝克抑鬱量表測試
    中國科學院心理研究所的一項研究表明,20歲至30歲的人群精神壓力最高,年輕人群體成為各年齡段壓力之首。不要因為害怕壓力而不敢向前邁步,不敢做出選擇和追求。世界上最幸福的人並不是沒有壓力的人。相反,他們是那些壓力很大,但不消沉的人。面對壓力,我們還有另一種選擇——就是暫時停下腳步,去休息、調整,了解自己的壓力指數,化解超出正常負荷的壓力,在適當的壓力指數下不斷前行。
  • 心理測試:弗洛伊德情境壓力測試,看看你的行事風格!
    心理測試:弗洛伊德情境壓力測試,看看你的行事風格! 測試開始: 題目:當你走在沙漠裡,身體又累又渴,突然,前面看到了一道牆,向兩邊延伸,看樣子很長很長。你走了過去,看到牆上面有個洞口,你趴在洞口向牆外看,你看到了一片綠洲,此時,你會怎麼做?
  • 心理學測試:選擇你討厭的一個羽毛,測試你最近的壓力來自哪裡?
    心理學測試:選擇你討厭的一個羽毛,測試你最近的壓力來自哪裡? A: ,而別人都做得很好,只有你經常犯小錯誤,所以壓力都集中在了你的心中,其實你可以適當的跟領導或同事進行溝通,找出你存在的問題。
  • OI-7960系列壓力測試系統的性能特點及應用
    打開APP OI-7960系列壓力測試系統的性能特點及應用 海洋興業科技 發表於 2021-01-09 09:50:56 OI-
  • 「空調專修」測試汽車空調壓力傳感器
    主要測量空調部件1、 空調壓力傳感器、空調泵變量閥、散熱電子扇、溫度傳感器等信號波形輸入通道測量。2、 部分執行器的信號發生、輸出通道可執行動作測試。連接OS210示波器,首先點開「示波器」菜單,點開「電壓表」檔,測試表筆接OS210輸入埠,來測試下蓄電池電壓,為測試確認設備是否連接正常,接著可以測試所有傳感器的針腳電壓,以識別針腳定義。
  • 【測試】神奇圖片測試心理,你有沒有感覺壓力山大?
    現代社會,隨著工作、生活節奏越來越快,現代人所面臨的心理壓力也越來越大。壓力測試,黑點多還是白點多?
  • 《激戰2》5月22日開啟限量刪檔壓力測試
    由ArenaNet開發,空中網運營的歐美奇幻網遊《激戰2》即將在近期登陸騰訊WeGame平臺,並將在5月22日開啟限量刪檔壓力測試,目前已開啟測試招募。  即日起到5月26日,WeGame測試專區開啟《激戰2》限量刪檔壓力測試招募,玩家可前來領取資格並預下載。測試期間體驗跨服PVP戰場「世界之戰」,將可在正式上線後獲得豐厚獎勵。
  • 【7/30】測試:小心並發測試中的測試陷阱
    四類測試三種方式Go語言提供了testing基礎類庫和go test指令,不使用第三方類庫就可以完成常見的測試工作。軟體研發中的測試工作一般分為四類,範圍從小到大排列依次是:單元測試、集合測試、鏈路測試和UI測試。其中鏈路測試、UI測試位於測試金字塔的頂端,一般劃分為黑盒測試範疇,用QA人力保證;單元測試與集合測試屬於白盒測試,繁雜而精細,可以依靠測試代碼自動完成。
  • 皮膚測試類APP測評
    第一個是我最推薦的,因為很方便,拍照就能夠知道你皮膚的狀況,每一項測試還會有相應的解決方案,我也看了一下,除了貴沒別的,還有令我驚訝的是黑頭也能檢測到
  • 老外講儀表52-用fluke 754 測試壓力變送器
    戳上面藍字關注我們,免費獲取聯鎖邏輯圖繪製軟體SmartCtrlLogic翻譯/製作:項陽原文/譯文:測試壓力變送器Testing a pressure transmitterto measure 4 to 20 mA 公差0.5%to test on 0.5% 然後我們將輸出0-100psiand we're going to source 0 to 100 psi做個3點測試