日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Monkey稳定性测试初探(二)

發布時間:2025/3/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Monkey稳定性测试初探(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

記得 關注轉發~~~

之前寫過一篇關于穩定性測試的文章:

Monkey隨機性能壓測初探(一)

01

什么是穩定性測試

? ? ? ?穩定性測試,是在一定壓力的情況下,對系統或某個模塊持續進行長時間的操作(一般遵循7*24小時原則),系統沒有出現業務問題、業務異常、內存泄露溢出等性能問題,保證了系統的穩定性,說明穩定性測試是通過的。穩定性測試一般在業務測試、性能測試完成后再進行。

? ? ? ? 我們可以借助Monkey工具模擬用戶操作進行穩定性測試。

02

Money是什么

Monkey測試是Android平臺自動化測試的一種手段,通過Monkey程序模擬用戶觸摸屏幕、滑動Trackball、按鍵等操作來對設備上的程序進行測試,檢測程序多久的時間會發生異常。和MonkeyRunner幾乎是完全不同的,MonkeyRunner相當于是搞自動化測試的了

官方介紹:
https://developer.android.com/studio/test/monkey.html


03

Monkey的介紹

03

Monkey的介紹

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終端模擬器

04

Monkey架構

05

Monkey弱點

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

06

Monkey的壓力測試參數

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

  • 常用選項

  • 事件選項

  • 約束選項

  • 調試選項

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

  • -v:用于反饋信息級別(一個-v表示一個層級,兩個-v表示兩個層級,通常最多三個-v)

示例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、時間選項的參數通常有:

  • --throttle:每個事件結束后的間隔時間

  • -s:表示偽隨機數生成的seed值,如果seed值相同,則兩次monkey所產生的事件序列也是一樣的

示例:

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、約束選項的參數通常有:

  • -p:指定文件名

  • count:指定要發送的事件數

  • -c:用此參數指定一個或幾個類別,activity必須指定一個category,才能被啟動,否則將會啟動不了

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
  • kill:此參數用來殺掉進程

    kill pid? 先執行adb shell? 再ps |grep monkey 查詢結果如下圖中15248 即為PID? 再kill pid(15248)即可

    例子:

adb shell monkey -p com.tpnet.hlquery --throttle 100--pct-touch50 --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

07

Monkey的結果與分析

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的最后也能查看到當前的已經執行的次數。

08

Monkey測試中內存問題分析


怎么樣去確定內存泄漏?

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之前,執行最后一次回收內存垃圾

09

–hprof 參數報告

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即可查看

10

Monkey Script腳本制作

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 只識別英文和數字輸入

總結

以上是生活随笔為你收集整理的Monkey稳定性测试初探(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。