学习记录:Monkey测试
1、為什么要開展壓力測試
提高產(chǎn)品的穩(wěn)定性
提高產(chǎn)品的留存率
2、什么時候開展壓力測試
首輪功能測試通過后
下班后的夜間進行
ADB 安裝調(diào)試橋
什么是MonkeyScript
MonkeyScript是一組可以被Monkey識別的命令集合
MonkeyScript可以完成重復(fù)固定的操作
什么是MonkeyRunner?
MonkeyRunner提供了一系列的API
MonkeyRunner可以完成模擬事件及截圖操作
Monkey和MonkeyRunner的區(qū)別
Monkey:在adb shell中,生成用戶或系統(tǒng)的偽隨機事件。
MonkeyRunner:通過API定義特定命令和事件控制設(shè)備。
MonkeyRunner APIs
MonkeyRunner:用來連接設(shè)備或模擬器
MonkeyDevice:提供安裝,卸載應(yīng)用,發(fā)生模擬事件
MonkeyImage:完成圖像保存,及對比的操作
MonkeyRunner的測試類型
多設(shè)備控制
功能測試
回歸測試
壓力測試結(jié)果
1、CRASH:即奔潰,應(yīng)用程序在使用過程中,非正常退出。
2、ANR:Application Not Responding
adb常用命令
adb help 查看幫助手冊
adb devices 檢測連接到電腦的安卓設(shè)備
adb pull 手機路徑 本機路徑 從手機中拉取信息放到本地電腦上
adb push 本機路徑 手機路徑 從本地推送信息到手機上去
adb install 電腦路徑 從電腦把apk安裝到設(shè)備上-(手打命令后可以直接,把apk拉進cmd)
adb shell pm list packages 查看手機端安裝的所有app包名
adb uninstall 包名
adb shell pm list packages 查看你的手機所有的安裝包;
adb shell pm list packages -3 查看手機上所有的第三方安裝包
搭建andriod sdk環(huán)境
壓測過程
確認手機和電腦成功連接
· 安裝測試App
adb install package.apk發(fā)送壓力指令
adb shell monkey 1000 #完成一千個指令獲取App包名
adb logcat | grep START給指定包打壓力
adb shell monkey -p package 1000首先用一個最簡單的mokey去試著找哪個是你想要的安裝包名稱:
1./ / -p參數(shù):表示指定測試的程序(空格后面跟安裝包名字,拿剛才的第三方安裝包一個個試)
/ /-v參數(shù):表示查看monkey執(zhí)行過程的信息(日志級別)(-v 越多越詳細,最多三個)
/ /數(shù)字100:表示測試事件數(shù)為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高級參數(shù)的應(yīng)用
1、throttle參數(shù)
指定事件之間的間隔
2、seed參數(shù)
指定隨機生成數(shù)的seed值
3、觸摸事件
設(shè)定觸摸事件百分比
4、動作事件
設(shè)定動作事件百分比
5、軌跡球事件
設(shè)定軌跡球事件百分比
7、主要導(dǎo)航事件
設(shè)定主要導(dǎo)航事件百分比,兼容中間鍵,返回鍵,菜單按鍵
8、系統(tǒng)導(dǎo)航事件
設(shè)定系統(tǒng)導(dǎo)航事件百分比,HOME,BACK,撥號及音量鍵
9、啟動Activity事件
設(shè)定啟動Activity的事件百分比
10、不常用事件
設(shè)定不常用事件的百分比
11、奔潰事件
忽略奔潰和異常
12、超時事件
忽略超時事件
CRASH結(jié)果析取
1、安裝可以引起CRASH的App
2、執(zhí)行壓力命令
3、析取CRASH的Exception信息
Events injected:XXX執(zhí)行到幾行
sing seed XXXX 重復(fù)之前的操作
adb shell monkey -p XXX(包名) -s XXX(重復(fù)之前的操作結(jié)束事件) 10000 忽略錯誤繼續(xù)進行 adb shell monkey -p XXX(包名) --ignore-crashes 10000ANR結(jié)果析取
1、安裝可以引起ANR的App
2、執(zhí)行壓力命令
3、析取ANR的Exception信息
adb install XXX.apk
adb shell monkey -p XXX(包名) 1000
獲取ANR
adb shell
cd /data/anr/
traces.txt
more traces.txt
無響應(yīng)問題可以在日志中搜索 “ANR” ,崩潰問題搜索 “CRASH” ,內(nèi)存泄露問題搜索"GC"(需進一步分析),異常問題搜索 “Exception”
monkey執(zhí)行時未加–ignore-crashes --ignore-crashes參數(shù),就先瀏覽日志中Events injected: 值,查看當前已執(zhí)行的次數(shù),就知道有無bug
程序無響應(yīng)的問題:在日志中搜索 “ANR”
崩潰問題:在日志中搜索 “Exception” ,在這里順便提一下常見的Java異常:
算術(shù)異常類:ArithmeticExecption
空指針異常類:NullPointerException
類型強制轉(zhuǎn)換異常:ClassCastException
數(shù)組負下標異常:NegativeArrayException
數(shù)組下標越界異常:ArrayIndexOutOfBoundsException
違背安全原則異常:SecturityException
文件已結(jié)束異常:EOFException
文件未找到異常:FileNotFoundException
字符串轉(zhuǎn)換為數(shù)字異常:NumberFormatException
操作數(shù)據(jù)庫異常:SQLException
輸入輸出異常:IOException
違法訪問錯誤:IllegalAccessError
內(nèi)存不足錯誤:OutOfMemoryError
堆棧溢出錯誤:StackOverflowError
Monkey Script
執(zhí)行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命令
啟動應(yīng)用
LaunchActivity(package,Activity)
5、UserWait命令
等待事件(等待元素的出現(xiàn))
UserWait(1000)
6、DispatchPress命令
按下鍵值
DispatchPress(int keycode) #keycode 66 回車鍵
1、啟動App
2、點擊輸入框
3、輸入查詢詞
4、點擊鍵盤的回車
5、點擊搜索按鈕
6、等待結(jié)果出現(xiàn)
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)
執(zhí)行方式:monkeyrunner demo.py
PS:tools變量需要配置環(huán)境,否則報錯
2、MonkeyRunner API - waitForConnection
等待設(shè)備連接,有多個device id,需要指明具體哪個設(shè)備。
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
啟動應(yīng)用
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發(fā)送事件的頻率。時間單位是ms(毫秒)1000毫秒=1秒。例1:發(fā)送10個事件,持續(xù)執(zhí)行時間1分鐘。adb shell monkey --throttle 6000 10,即10個事件,做完一個事件就等待6秒后再執(zhí)行。Monkey命令——指令包
p 此參數(shù)指定了一個包,Monkey將只允許系統(tǒng)啟動這些包里的Activity。 -p -p 如果用此參數(shù)指定了多個包,Monkey將只允許系統(tǒng)啟動這些包里的Activity。 例3:對app進行穩(wěn)定性測試,執(zhí)行100次事件。adb shell monkey -p com.wuba 100獲取包名
adb shell pm list packagesMonkey命令-日志設(shè)置
-v Level 0 除啟動提示、測試完成和最終結(jié)果之外,提供較少信息。 -v-v Level 1 提供較為詳細的測試信息,如逐個發(fā)送到Activity的事件。 -v-v-v Level 2 提供更加詳細的設(shè)置信息,如測試中被選中的或未被選中的Activity。 例4:對app進行穩(wěn)定性測試,執(zhí)行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日志導(dǎo)出到本地
adb shell monkey -p com.wuba -v-v-v 100 >d:\wuba.txtMonkey命令-seed值
在Monkey運行過程中,肯定會發(fā)現(xiàn)異常、奔潰、無響應(yīng)等問題,對于此類問題如何進行復(fù)現(xiàn)呢?-s 偽隨機數(shù)生成器的seed值。如果用相同的seed值再次運行Monkey,它將生成相同的事件序列。使用場景復(fù)現(xiàn)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運行過程中,我們可以通過結(jié)束進程的方式來終止Monkey的執(zhí)行,當然在運行過程中遇到異常、奔潰等情況Monkey也會停止。為了保證執(zhí)行的事件數(shù)執(zhí)行完整,我們可以通過調(diào)試選項的設(shè)置來防止在運行過程中Monkey命令的提前結(jié)束。–ignore-crashes 忽略在應(yīng)用程序出現(xiàn)crash時導(dǎo)致的monkey停止。–ignore-timeouts 忽略在應(yīng)用程序出現(xiàn)ANR問題時導(dǎo)致monkey停止。–ignore-security-exceptions 忽略應(yīng)用程序發(fā)生許可錯誤時導(dǎo)致monkey停止。例5:對58同城進行穩(wěn)定性測試,執(zhí)行50次事件,忽略過程中遇到的異常,直到50次事件完成。adb shell monkey -p com.wuba --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions -v-v-v 50部份參數(shù):–pct-touch:觸摸事件 --pct-trackball :軌跡事件。–pct-motion:動作事件(手勢) --pct-nav :基本導(dǎo)航事件。–pct-appswitch:啟動activity事件 -pct-majornav:主要導(dǎo)航事件。–pct-rotation:屏幕旋轉(zhuǎn)事件 --pct-syskeys:“系統(tǒng)”按鍵事件。總結(jié):
1、Monkey是對安卓apk進行隨機事件的操作,通過報告來查看apk是否穩(wěn)定。
2、只適用安卓平臺。
3、根據(jù)公司不同產(chǎn)品的特性可設(shè)置不同概率來針對性測試或回歸(如抖音他的滑動頻率高)。
使用python os輸入cmd命令
總結(jié)
以上是生活随笔為你收集整理的学习记录:Monkey测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pandownload 开发者被抓了,但
- 下一篇: CentOS 7 安装 MariaDB