1. monkey
1.1. 介紹
- 通過monkey程序模擬用戶觸摸屏幕,滑動Trackball、按鍵等操作來對設備上的程序進行壓力測試,檢測程序多久的時間會發生異常,檢查和評估被測程序的穩定性
- 官方:Monkey是一個程序,運行在您的模擬器或設備上,並生成偽隨機的用戶事件流,如點擊,觸摸或手勢,以及一些系統級事件。 您可以使用Monkey以隨機但可重復的方式對您正在開發的應用程序進行壓力測試。
- 主要用於Android的壓力測試,自動的一個壓力測試小工具。目的是為了測試APP是否會crash
- 用戶主要是通過adb命令來啟動Monkey的,Monkey在運行時,會根據命令行參數的配置,生成偽隨機的事件流,並在Android設備上執行對應的測試事件。同時,Monkey還會對測試系統進行監測,當出現以下幾種情況時會進行特殊處理:
1、如限定了Monkey運行在特定包上,當監測到試圖轉到其他包的操作,將對其進行阻止。
2、如應用程序崩潰或接收到任何失控異常,Monkey將記錄對應的錯誤日志,並根據命令行參數判斷是停止運行還是繼續運行。
3、如果應用程序發生了程序無響應(application not responding)的錯誤,Monkey將記錄對應的錯誤日志,並根據命令行參數判斷是停止運行還是繼續運行。
4、按照選定的不同級別的反饋信息,在Monkey中還可以看到其執行過程報告和生成的事件。
1.2. 流程
1、通過名為“monkey”的Shell腳本去啟動Monkey.jar程序。
啟動腳本是一個shell腳本,在Android文件系統的存放路徑是:/system/bin/monkey。
2、在指定的APP上模擬用戶點擊,滑動,輸入等操作以極快的速度來對設備程序進行壓力測試。
3、檢測程序是否會發生異常如:crash,然后通過日志進行排錯。
1.3. 啟動及關閉
- monkey啟動方式:
1、通過pc cmd命令:adb shell monkey {+命令參數}進行monkey測試。(連接上移動設備)
2、在pc上’adb shell’進入Android系統,’cd /system/bin’進入指定目錄,輸入’monkey’有usage說明啟動成功,再執行monkey {+命令參數}。(連接上移動設備)
3、Android機或模擬器上直接執行monkey命令,在真機上安裝Android終端模擬器
- 強制關閉monkey
1、adb shell ps 查看全部在運行的進程
2、查找出com.android.commands.monkey 進程PID
3、adb shell kill pid:殺掉monkey進程
- monkey測試中,如何終止運行
方法一:
新建一個窗口
執行: adb shell
再執行ps | grep monkey,返回來的第一個數字,即是monkey的進程號
然后kill pid 進程號
方法二:
對手機進行重啟😂
新建一個窗口
執行adb reboot
1.4. 命令
- monkey程序由Android系統自帶,使用java語言寫成,在Android文件系統中的存放路徑是:/system/framework/monkey.jar
- monkey命令格式:adb shell monkey [options] <event-count>
[options] 是指monkey可傳入的參數,是可選項(如果不指定options,Monkey將以無反饋模式啟動,並把事件任意發送到安裝在目標環境中的全部包)
<event-count> 是指隨機發送事件數。如:輸入100就是執行100個偽隨機事件,為必選項。
1.5. 日志管理作用及日志分析
- Monkey日志管理是Monkey測試中非常重要的一個環節,通過日志管理分析,可以獲取當前測試對象在測試過程中是否會發生異常,以及發生的概率,同時還可以獲取對應的錯誤信息,幫助開發定位和解決問題。
- monkey日志保存方法:
1.保存在PC中:>adb shell monkey [option] <count> >d:\monkey.txt
eg:C:\Users\Shuqing>adb shell monkey -v -v 100 >d:\monkeylog.txt
2.保存在手機上:C:\Users\Shuqing>adb shell回車;monkey -v 100 >/sdcard/monkeylog.log
注意:不能寫成C:\Users\Shuqing>adb shell monkey -f /sdcard/kyb.txt -v 1 > /mnt/sdcard/monkey.log 否則會報錯“系統找不到指定的路徑”。
3.標准流和錯誤流分開保存:Monkey [option] <count> 1>/sdcard/monkey.txt 2>/sdcard/error.txt
C:\Users\Shuqing>adb shell monkey -v 100 1>d:\monkey.log 2>d:\error.log
執行以上命令,Monkey的運行日志和異常日志將被分開保存。此時Monkey的運行日志將被保存在monkey.txt文件中,而異常日志將被保存在D盤下的error.txt中。
- 日志分析:
1.正常:monkey測試順利執行完成,在log的最后,會打印當前執行時間的次數和所花費的時間。Monkey finished代表執行完成
2.異常:出現錯誤后的分析步驟----看monkey的日志(注意第一個switch及異常信息等)
a程序無響應的問題:在日志中搜索‘ANR’
b奔潰問題:在日志中搜索‘exception’----出現空指針,NullPointerException,是bug。
monkey執行中斷,在log最后也能看到當前執行次數。
3.看問題:
A monkey執行時未加--ignore-crashes --ignore-crashes參數,就先瀏覽日志中Events injected: 值,查看當前已執行的次數,就知道有無bug
B 程序無響應的問題:在日志中搜索 “ANR”
C 崩潰問題:在日志中搜索“Exception”,常見的Java異常:
算術異常類:ArithmeticExecption;空指針異常類:NullPointerException
類型強制轉換異常:ClassCastException;數組負下標異常:NegativeArrayException
數組下標越界異常:ArrayIndexOutOfBoundsException
違背安全原則異常:SecturityException;文件已結束異常:EOFException
文件未找到異常:FileNotFoundException;
字符串轉換為數字異常:NumberFormatException
操作數據庫異常:SQLException;輸入輸出異常:IOException
違法訪問錯誤:IllegalAccessError;內存不足錯誤:OutOfMemoryError
堆棧溢出錯誤:StackOverflowError
其他,請參考:https://www.cnblogs.com/cvst/p/5822373.html
D 找出問題后的操作步驟:
找到是monkey里面的哪個地方出錯
查看Monkey里面出錯前的一些事件動作,並手動執行該動作
若以上步驟還不能找出,可以再執行一遍monkey命令,注意seed值要一樣