移動互聯(lián)網(wǎng)與傳統(tǒng)互聯(lián)網(wǎng)的區(qū)別?
移動互聯(lián)網(wǎng)場景下的應(yīng)用,面臨著比傳統(tǒng)互聯(lián)網(wǎng)更多的挑戰(zhàn)。移動設(shè)備的碎片化,用戶千奇百怪的使用場景,來自于各種環(huán)境的干擾,都有可能讓你的應(yīng)用出現(xiàn)崩潰、ANR(Application Not Response)等情況,如果一個(gè)APP經(jīng)常出現(xiàn)閃退或卡死,那么用戶體驗(yàn)會受到很大傷害,在有競品的情況下很容易造成用戶的流失。
面對這種情況,除了在手工用例上盡可能模擬各種用戶場景外,Android系統(tǒng)也提供了很多測試工具及思路,本節(jié)介紹Monkey Test+DDMS安卓系統(tǒng)監(jiān)控的方法進(jìn)行測試,后續(xù)會探討結(jié)合自動化以及模糊測試的思路來開展更深層次的穩(wěn)定性測試。
基于Monkey的穩(wěn)定性測試
Monkey是Android平臺自動化的一種手段,可以在模擬器里或?qū)嶋H設(shè)備中運(yùn)行,它向系統(tǒng)發(fā)送偽隨機(jī)的用戶事件流,如按鍵輸入、觸摸屏輸入、手勢輸入等,實(shí)現(xiàn)對正在開發(fā)的應(yīng)用程序進(jìn)行壓力測試。一般下班后可以自定義腳本進(jìn)行運(yùn)行,第二天來看報(bào)告就行了。同時(shí)我們結(jié)合安卓系統(tǒng)自帶的DDMS監(jiān)控平臺來對應(yīng)用日志、線程、CPU及內(nèi)存消耗做一個(gè)測試;
推薦閱讀官方文檔,雖然是全英文且需要翻墻:https://developer.android.com/studio/test/monkey.html
Monkey提供了很多的可執(zhí)行參數(shù),具體可看官方說明,截圖如下;

選取幾個(gè)典型的參數(shù):
--pct-touch
Adjust percentage of touch events. (Touch events are a down-up event in a single place on the screen.)
調(diào)整觸摸事件的百分比(觸摸事件是一個(gè) down-up 事件,它發(fā)生在屏幕上的某單一位置)。模擬在應(yīng)用上隨機(jī)觸摸
--pct-trackball
調(diào)整軌跡事件的百分比,也就是模擬在手機(jī)上隨機(jī)移動,并伴有點(diǎn)擊操作
--throttle
每個(gè)event之間的操作時(shí)間間隔,ms
下面我們以一個(gè)具體的例子來看結(jié)果,測試環(huán)境我們以夜神安卓模擬器為例,測試的應(yīng)用程序?yàn)槲夜舅玫臏y試包,包名為net.medlinker.medlinker:
我所編寫的monkey腳本為:
adb shell monkey -p net.medlinker.medlinker (制定測試應(yīng)用) ? --pct-touch 30(觸摸事件占比30%) ?--pct-motion 30(移動事件30%) --pct-trackball 10(軌跡事件10%) --pct-nav 10(導(dǎo)航事件10%) --pct-majornav 5 --pct-appswitch 5 --pct-anyevent 10 -s 1222(seed號為1222,便于重現(xiàn)) ?-v -v 1000 --throttle 300(每次事件間隔300ms) 2000(總共執(zhí)行2000次操作)
在命令行下執(zhí)行操作,可以看到模擬器中制定的應(yīng)用已經(jīng)在不斷自動執(zhí)行操作,同時(shí)我們打開DDMS,監(jiān)控系統(tǒng)日志及堆棧使用情況:
Monkey日志如下,記錄所有的操作順序就結(jié)果,如果應(yīng)用有crash或者anr信息,測試人員也可以直接搜索看到,唯一的缺點(diǎn)就是日志不夠詳細(xì),有些隱藏的錯(cuò)誤只能通過分析系統(tǒng)日志:

DDMS日志記錄一個(gè)窗體泄露的異常,雖然對用戶使用幾乎沒有影響,但是隨著內(nèi)存泄露的累積,APP極有可能發(fā)生crash,跟研發(fā)同學(xué)定位后也及時(shí)地解決這個(gè)隱患,關(guān)于ddms推薦大家也同樣去閱讀安卓的官方文檔進(jìn)行進(jìn)一步的了解:
