学习记录:Monkey测试
1、為什么要開展壓力測試
提高產品的穩定性
提高產品的留存率
2、什么時候開展壓力測試
首輪功能測試通過后
下班后的夜間進行
ADB 安裝調試橋
什么是MonkeyScript
MonkeyScript是一組可以被Monkey識別的命令集合
MonkeyScript可以完成重復固定的操作
什么是MonkeyRunner?
MonkeyRunner提供了一系列的API
MonkeyRunner可以完成模擬事件及截圖操作
Monkey和MonkeyRunner的區別
Monkey:在adb shell中,生成用戶或系統的偽隨機事件。
MonkeyRunner:通過API定義特定命令和事件控制設備。
MonkeyRunner APIs
MonkeyRunner:用來連接設備或模擬器
MonkeyDevice:提供安裝,卸載應用,發生模擬事件
MonkeyImage:完成圖像保存,及對比的操作
MonkeyRunner的測試類型
多設備控制
功能測試
回歸測試
壓力測試結果
1、CRASH:即奔潰,應用程序在使用過程中,非正常退出。
2、ANR:Application Not Responding
adb常用命令
adb help 查看幫助手冊
adb devices 檢測連接到電腦的安卓設備
adb pull 手機路徑 本機路徑 從手機中拉取信息放到本地電腦上
adb push 本機路徑 手機路徑 從本地推送信息到手機上去
adb install 電腦路徑 從電腦把apk安裝到設備上-(手打命令后可以直接,把apk拉進cmd)
adb shell pm list packages 查看手機端安裝的所有app包名
adb uninstall 包名
adb shell pm list packages 查看你的手機所有的安裝包;
adb shell pm list packages -3 查看手機上所有的第三方安裝包
搭建andriod sdk環境
壓測過程
確認手機和電腦成功連接
· 安裝測試App
adb install package.apk發送壓力指令
adb shell monkey 1000 #完成一千個指令獲取App包名
adb logcat | grep START給指定包打壓力
adb shell monkey -p package 1000首先用一個最簡單的mokey去試著找哪個是你想要的安裝包名稱:
1./ / -p參數:表示指定測試的程序(空格后面跟安裝包名字,拿剛才的第三方安裝包一個個試)
/ /-v參數:表示查看monkey執行過程的信息(日志級別)(-v 越多越詳細,最多三個)
/ /數字100:表示測試事件數為100
指定一個包 adb shell monkey -p com.tencent.news -v -v -v 100 (此時指定軟件會被打開并開始亂點亂按)
指定多個包 adb shell monkey -p com.tencent.news -p com.pdfreader -p com.widgets -v 1000
不指定包 adb shell monkey -v 1000
Monkey高級參數的應用
1、throttle參數
指定事件之間的間隔
2、seed參數
指定隨機生成數的seed值
3、觸摸事件
設定觸摸事件百分比
4、動作事件
設定動作事件百分比
5、軌跡球事件
設定軌跡球事件百分比
7、主要導航事件
設定主要導航事件百分比,兼容中間鍵,返回鍵,菜單按鍵
8、系統導航事件
設定系統導航事件百分比,HOME,BACK,撥號及音量鍵
9、啟動Activity事件
設定啟動Activity的事件百分比
10、不常用事件
設定不常用事件的百分比
11、奔潰事件
忽略奔潰和異常
12、超時事件
忽略超時事件
CRASH結果析取
1、安裝可以引起CRASH的App
2、執行壓力命令
3、析取CRASH的Exception信息
Events injected:XXX執行到幾行
sing seed XXXX 重復之前的操作
adb shell monkey -p XXX(包名) -s XXX(重復之前的操作結束事件) 10000 忽略錯誤繼續進行 adb shell monkey -p XXX(包名) --ignore-crashes 10000ANR結果析取
1、安裝可以引起ANR的App
2、執行壓力命令
3、析取ANR的Exception信息
adb install XXX.apk
adb shell monkey -p XXX(包名) 1000
獲取ANR
adb shell
cd /data/anr/
traces.txt
more traces.txt
無響應問題可以在日志中搜索 “ANR” ,崩潰問題搜索 “CRASH” ,內存泄露問題搜索"GC"(需進一步分析),異常問題搜索 “Exception”
monkey執行時未加–ignore-crashes --ignore-crashes參數,就先瀏覽日志中Events injected: 值,查看當前已執行的次數,就知道有無bug
程序無響應的問題:在日志中搜索 “ANR”
崩潰問題:在日志中搜索 “Exception” ,在這里順便提一下常見的Java異常:
算術異常類:ArithmeticExecption
空指針異常類:NullPointerException
類型強制轉換異常:ClassCastException
數組負下標異常:NegativeArrayException
數組下標越界異常:ArrayIndexOutOfBoundsException
違背安全原則異常:SecturityException
文件已結束異常:EOFException
文件未找到異常:FileNotFoundException
字符串轉換為數字異常:NumberFormatException
操作數據庫異常:SQLException
輸入輸出異常:IOException
違法訪問錯誤:IllegalAccessError
內存不足錯誤:OutOfMemoryError
堆棧溢出錯誤:StackOverflowError
Monkey Script
執行Monkey腳本的命令,
adb shell monkey -f
1、DispatchTrackball命令
軌跡球事件
DispatchTrackball(long downtime, long eventide, int action, float x, float y, float pressure, float size, int metastate, float xprecision, float yprecision, int device, int edgeflags)
2、DispatchPointer命令
點擊事件
DispatchPointer(long downtime, long eventide, int action, float x, float y, float pressure, float size, int metastate, float xprecision, float yprecision, int device, int edgeflags)
3、DispatchString命令
輸入字符串事件
DispatchString(String text)
4、LaunchActivity命令
啟動應用
LaunchActivity(package,Activity)
5、UserWait命令
等待事件(等待元素的出現)
UserWait(1000)
6、DispatchPress命令
按下鍵值
DispatchPress(int keycode) #keycode 66 回車鍵
1、啟動App
2、點擊輸入框
3、輸入查詢詞
4、點擊鍵盤的回車
5、點擊搜索按鈕
6、等待結果出現
7、點擊clear按鈕
demo
typ=user count=10 speed=1.0 start data >>LaunchActivity(XXXX,.MainActivity) DispatchPointer(10,10,0點擊,x一樣,y一樣,1,1,-1,1,1,0,0) DispatchPointer(10,10,1按下,x一樣,y一樣,1,1,-1,1,1,0,0) DispatchString(text) UserWait(1000) DispatchPress(66) UserWait(1000) DispatchPointer() DispatchPointer() UserWait(6000)元素定位
andriod-sdk
tools
uiautomatorviewer
bounds [x大于,y大于][x小于,y小于]
運行腳本
adb shell monkey -f XXX.script 2
把腳本放到手機路徑
adb push XXX.script XXXX路徑
MonkeyRunner
1、MonkeyRunner API - alert
警告框
viod alert(string message, string title, string okTitle)
執行方式:monkeyrunner demo.py
PS:tools變量需要配置環境,否則報錯
2、MonkeyRunner API - waitForConnection
等待設備連接,有多個device id,需要指明具體哪個設備。
waitForConnection(float timeout, string deviceid)
3、MonkeyDevice API - drag
拖動
drag(tuple start, tuple end, float duration, integer steps)
4、MonkeyDevice API - press
按鍵
press(string keycode, dictionary type)
keycode名,Down、UP、DOWN_AND_UP
5、MonkeyDevice API - startActivity
啟動應用
startActivity(package+’/’+activity)
6、MonkeyDevice API - touch
點擊
touch (integer x, integer y, integer type)
x 坐標值, y坐標值,
type: DOWN, UP, DOWN_AND_UP
7、MonkeyDevice API - type
輸入
type (string message)
8、MonkeyDevice API -takeSnapshot
截屏
MonkeyImage takeSnapshot ()
9、MonkeyImage API -sameAs
圖像對比
boolean sameAs (MokeyImage other,float percent)
10、MonkeyImage API - writetoFile
保存圖像文件
void writeToFile (string path, string format)
monkey測試命令
adb shell monkey -v -v -v -s 8888 --throttle 300 --pct-touch 30 --pct-motion 25 --pct-appswitch 25 --pct-majornav 5 --pct-nav 0 --pct-trackball 0 -p com.wwdy.app 10000 >D:\monkey.txt壓測
adb shell monkey -s 0 -vvv -p com.example.hello --throttle 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes 1000 >e:\log1.txt 2>&1Monkey支持的所有命令
adb shell monkeyMonkey命令-事件間隔
throttle 在事件之間插入固定延遲。通過這個選項可以控制Monkey發送事件的頻率。時間單位是ms(毫秒)1000毫秒=1秒。例1:發送10個事件,持續執行時間1分鐘。adb shell monkey --throttle 6000 10,即10個事件,做完一個事件就等待6秒后再執行。Monkey命令——指令包
p 此參數指定了一個包,Monkey將只允許系統啟動這些包里的Activity。 -p -p 如果用此參數指定了多個包,Monkey將只允許系統啟動這些包里的Activity。 例3:對app進行穩定性測試,執行100次事件。adb shell monkey -p com.wuba 100獲取包名
adb shell pm list packagesMonkey命令-日志設置
-v Level 0 除啟動提示、測試完成和最終結果之外,提供較少信息。 -v-v Level 1 提供較為詳細的測試信息,如逐個發送到Activity的事件。 -v-v-v Level 2 提供更加詳細的設置信息,如測試中被選中的或未被選中的Activity。 例4:對app進行穩定性測試,執行100次事件,分別查看不同日志級別記錄的信息情況。adb shell monkey -p com.wuba -v 100adb shell monkey -p com.wuba -v-v 100adb shell monkey -p com.wuba -v -v -v 100日志導出到本地
adb shell monkey -p com.wuba -v-v-v 100 >d:\wuba.txtMonkey命令-seed值
在Monkey運行過程中,肯定會發現異常、奔潰、無響應等問題,對于此類問題如何進行復現呢?-s 偽隨機數生成器的seed值。如果用相同的seed值再次運行Monkey,它將生成相同的事件序列。使用場景復現bug,回歸測試(驗證bug)adb shell monkey -s 1593077384911 -p com.wuba -v-v-v 100 >d:\wuba4.txtadb shell monkey -s 100 -p com.wuba -v-v-v 50在Monkey運行過程中,我們可以通過結束進程的方式來終止Monkey的執行,當然在運行過程中遇到異常、奔潰等情況Monkey也會停止。為了保證執行的事件數執行完整,我們可以通過調試選項的設置來防止在運行過程中Monkey命令的提前結束。–ignore-crashes 忽略在應用程序出現crash時導致的monkey停止。–ignore-timeouts 忽略在應用程序出現ANR問題時導致monkey停止。–ignore-security-exceptions 忽略應用程序發生許可錯誤時導致monkey停止。例5:對58同城進行穩定性測試,執行50次事件,忽略過程中遇到的異常,直到50次事件完成。adb shell monkey -p com.wuba --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions -v-v-v 50部份參數:–pct-touch:觸摸事件 --pct-trackball :軌跡事件。–pct-motion:動作事件(手勢) --pct-nav :基本導航事件。–pct-appswitch:啟動activity事件 -pct-majornav:主要導航事件。–pct-rotation:屏幕旋轉事件 --pct-syskeys:“系統”按鍵事件。總結:
1、Monkey是對安卓apk進行隨機事件的操作,通過報告來查看apk是否穩定。
2、只適用安卓平臺。
3、根據公司不同產品的特性可設置不同概率來針對性測試或回歸(如抖音他的滑動頻率高)。
使用python os輸入cmd命令
總結
以上是生活随笔為你收集整理的学习记录:Monkey测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pandownload 开发者被抓了,但
- 下一篇: C# 简单判断枚举值是否被定义