1樱拴、為什么要開展app壓力測試柠衍?
(1)、為了提高產(chǎn)品的穩(wěn)定性晶乔;
(2)珍坊、為了提高產(chǎn)品的留存率;
2正罢、什么時(shí)候開展app壓力測試阵漏?
(1)、首輪功能測試通過以后;
(2)履怯、下班后的夜間進(jìn)行回还;
3、如何開展app壓力測試叹洲?
Monkey:在adb shell中柠硕,生成用戶或系統(tǒng)的偽隨機(jī)事件;
MonkeyRunner:通過API定義特定命令和事件來控制設(shè)備疹味;
(1)仅叫、MonkeyRunner API:用來連接設(shè)備或模擬器;
(2)糙捺、MonkeyDevice:提供安裝,卸載應(yīng)用笙隙,發(fā)送模擬事件洪灯;
(3)、完成圖像保存竟痰,及對(duì)比操作签钩;
4、異常app壓力測試結(jié)果分類:
(1)坏快、crash:即崩潰铅檩,app在使用過程中,非正常退出莽鸿;
(2)昧旨、anr:應(yīng)用無響應(yīng),application not response;
5祥得、app壓力測試過程:
(1)兔沃、安裝Android sdk并配置環(huán)境變量;
(2)级及、打開手機(jī)開發(fā)者模式乒疏;
(3)、確定手機(jī)與電腦已經(jīng)連接:adb devices
xuxiankaideMac:~ staff$ adb devices
List of devices attached
- daemon not running; starting now at tcp:5037
- daemon started successfully
S9B7N17A28002645 unauthorized
SWYDU17407005822 unauthorized
(4)饮焦、安裝測試APP:adb install package.apk
(5)怕吴、發(fā)送壓力指令:adb shell monkey 1000,給手機(jī)發(fā)送10000個(gè)偽隨機(jī)指令
(6)县踢、獲取APP包名:adb logcat | grep START
(7)转绷、給指定包打壓力:adb shell monkey -p com.android.calculator2 1000,給手機(jī)計(jì)算器app發(fā)送1000個(gè)偽隨機(jī)指令
6殿雪、monkey高級(jí)參數(shù):
(1)暇咆、延時(shí)參數(shù):--throttle 1000,指定事件之間的間隔為1000毫秒;
(2)爸业、種子參數(shù):-s 100其骄,指定隨機(jī)生成樹的seed值為100,使得兩次的隨機(jī)操作事件完全一樣扯旷,可以用來復(fù)現(xiàn)bug拯爽;
(3)、觸摸事件參數(shù):--pct-touch 50钧忽,設(shè)置觸摸事件的百分比為50%毯炮,剩余的事件會(huì)隨機(jī);
(4)耸黑、動(dòng)作事件參數(shù):--pct-motion 30桃煎,設(shè)置動(dòng)作事件的百分比為30%,剩余的時(shí)間會(huì)隨機(jī)大刊;
(5)为迈、軌跡球事件:--pct-trackball <percent>,設(shè)置軌跡球事件的百分比缺菌;
(6)葫辐、基本導(dǎo)航事件:--pct-nav <percent>,設(shè)置基本導(dǎo)航事件的百分比伴郁,輸入設(shè)備的上下左右耿战;
(7)、主要導(dǎo)航事件:--pct-majornav <percent>焊傅,設(shè)置主要導(dǎo)航事件的百分比剂陡,兼容中間鍵,返回鍵租冠,菜單按鍵鹏倘;
(8)、系統(tǒng)導(dǎo)航事件:--pct-syskeys <percent>顽爹,設(shè)置系統(tǒng)導(dǎo)航事件的百分比纤泵,HOME,BACK镜粤,撥號(hào)及音量鍵捏题;
(9)、啟動(dòng)Activity事件:--pct-appswitch <percent>肉渴,設(shè)置啟動(dòng)activity的事件的百分比公荧;
(10)、不常用事件百分比:--pct-anyevent <percent>同规,設(shè)置不常用事件的百分比循狰;
(11)窟社、忽略崩潰事件:--ignore-crashes <event-count>,設(shè)置忽略崩潰和異常绪钥;
(12)灿里、忽略超時(shí)事件:--ignore-timeouts <event-count>,設(shè)置忽略超時(shí)事件程腹;
實(shí)例:adb shell monkey -v -p com.android.calculator2 --pct-touch 50 --pct-motion 50 --ignore-crashes -ignore-timeouts 1000
7匣吊、 CRASH和ANR異常,異常測試日志信息提却缌省:
在連線情況下色鸳,一般在晚上執(zhí)行壓力測試時(shí),需要加上忽略崩潰事件和忽略超時(shí)事件见转,等第二天來之后命雀,可以從adb log中過濾出CRASH和ANR異常的日志內(nèi)容,然后在adb log中的最后一行獲取seed值池户,用來復(fù)現(xiàn)問題咏雌。復(fù)制所獲取的內(nèi)容和monkey腳本到txt文本,發(fā)給開發(fā)定位具體問題原因校焦。
如果是沒有連線時(shí),手機(jī)上的app突然出現(xiàn)ANR统倒,那么可以執(zhí)行如下操作獲取日志:
1寨典、連線手機(jī)和電腦;
2房匆、輸入如下命令:
cd /data/anr/
ls
more traces.txt
3耸成、找到ANR異常信息,發(fā)給開發(fā)浴鸿。
8井氢、執(zhí)行monkey腳本的命令:
adb shell monkey -f <scriptfile> <event-count>
(1)、軌跡球事件:DispatchTrackball(int action,float x,float y)岳链,action參數(shù)花竞,0代表按下,1代表彈起掸哑,x和y代表坐標(biāo)點(diǎn)约急;
(2)、點(diǎn)擊事件:DispatchPointer(int action,float x,float y)苗分,action參數(shù)厌蔽,0代表按下,1代表彈起摔癣,x和y代表坐標(biāo)點(diǎn)奴饮;
(3)纬向、輸入字符串事件:DispatchString(String text);
(4)戴卜、啟動(dòng)應(yīng)用事件:LaunchActivity(package,Activity)逾条;
(5)、等待事件:UserWait(1000)叉瘩,1000毫秒=1秒膳帕;
(6)、按下鍵值事件:DispatchPress(int keycode)薇缅,keycode 66 回車鍵危彩;
實(shí)例:在瀏覽器APP中輸入一個(gè)字符串,重復(fù)點(diǎn)擊100次
1泳桦、啟動(dòng)app汤徽;
2、點(diǎn)擊輸入框灸撰;
3谒府、輸入test;
4浮毯、點(diǎn)擊回車鍵完疫;
5、點(diǎn)擊搜索按鈕债蓝;
6壳鹤、等待結(jié)果的出現(xiàn);
7饰迹、點(diǎn)擊clear按鈕芳誓。
編寫mook.script腳本內(nèi)容:
type=user
count=10
speed=1.0
start data >>
LauchActivity(com.example.zhagnjina.minibrowser2,com.example.zhagnjina.minibrowser2.myapplication.MainActivity)
UserWait(2000)
DispatchPointer(10,10,0,100,100,1,1-1,1,1,0,0)
DispatchPointer(10,10,1,100,100,1,1-1,1,1,0,0)
DispatchString(test)
UserWait(1000)
DispatchPress(66)
UserWait(1000)
DispatchPointer(10,10,0,400,100,1,1-1,1,1,0,0)
DispatchPointer(10,10,1,400,100,1,1-1,1,1,0,0)
UserWait(6000)
DispatchPointer(10,10,0,300,100,1,1-1,1,1,0,0)
DispatchPointer(10,10,1,300,100,1,1-1,1,1,0,0)
UserWait(6000)
將mook.script腳本推送到手機(jī)中:
adb push mook.scripts /data/local/tmp
cd /data/local/tmp
ll
執(zhí)行腳本:
adb shell monkey -f /data/local/tmp/mook.script 2,2代表執(zhí)行2遍腳本
注意點(diǎn):
1啊鸭、點(diǎn)擊位置坐標(biāo)锹淌,可以使用UI Automator Viewer工具來獲取,bounds[376,97][464,145]赠制,表示某個(gè)區(qū)域的從左上角到右下角的兩個(gè)點(diǎn)的坐標(biāo)赂摆;
2、app必須要允許被外部調(diào)起憎妙,這就需要在AndroidManifest.xml中的LauchActivity之下加入一個(gè)參數(shù):android:exported=true库正;