? ? 最近在做一些monkey壓力測試的改進工作郊供,網(wǎng)上也有一些修改Monkey源碼的分享抵乓,寫得挺好的,我不一一贅述阎抒。這里介紹我對于monkey源碼修改的一些實踐,并一一給大家介紹我所說的基于場景化的monkey壓力測試消痛。
? ? 熟悉monkey的同學或多或少地知道這個工具的優(yōu)點且叁,這里我關注monkey的某些缺點,比如:無法識別控件秩伞,無法判斷被測對象出現(xiàn)異常后如何處理等逞带,除了這些,其實對于一些只提供服務的應用纱新,比如微信小程序展氓,這種快應用越來越普及,而這種應用我們無法直接通過monkey去啟動測試脸爱,其中微信類似于提供了小程序的一個服務平臺遇汞,此時有同學會說,我啟動微信簿废,然后再點擊小程序入口不就可以進去了嗎空入?是,這種方法是可以族檬,但是我們要知道m(xù)onkey是隨機啟動應用的歪赢,因此會存在即使我們點擊進入了小程序,但是很快又會回到微信界面单料,然后有可能再也無法進入到我們想進行monkey壓力測試的特定小程序埋凯。
? ? 要想能滿足特定的測試需求,必須對于monkey源碼進行改造扫尖。monkey源碼的改造還是有比較多的案例念链,包含自帶截圖衬浑、防止禁止網(wǎng)絡等狂鞋。而這里我講的主要是為了滿足場景化測試做的一些改進菇存,范圍限制于類似于小程序的接口測試,測試對象是對外提供接口或者組件的服務應用狰域。咋一聽媳拴,感覺monkey這種隨機構(gòu)造事件的工具跟場景化測試毫無關聯(lián)。何為場景化呢兆览?我的理解就是根據(jù)一定的屈溉、有目的地構(gòu)造測試條件或者背景,同時這些條件或者背景是符合實際用戶使用的抬探。那么針對開放出去的接口或者組件如何進行場景化構(gòu)建從而為monkey壓力測試提供測試對象呢子巾?在我們的實踐過程中主要采取兩種方式:一種來源于已經(jīng)開發(fā)商用的成型的應用帆赢,這類應用已經(jīng)被用于一定商業(yè)目的開發(fā)出來的,其實已經(jīng)滿足上面提到的要求线梗,第二種就是針對接口的分析椰于,測試同學人為對接口和組件進行組合后開發(fā)出成型的應用,達到盡可能多的覆蓋所有接口仪搔。這些測試對象梳理出來后瘾婿,我們就可以進行下一步monkey源碼改造了。
? 上面講了那么多烤咧,其實也已經(jīng)初步說明了本次實踐的主要目的:1偏陪、讓monkey能主動去進入我們指定的小程序 2、當monkey發(fā)送intent消息去啟動另外一個應用時能主動再跳回到原有的小程序繼續(xù)執(zhí)行monkey事件煮嫌。那么如何做到這些呢笛谦?在runMonkeyCycles循環(huán)函數(shù)里增加一個判斷分支,當發(fā)現(xiàn)小程序進程未啟動或者小程序存在崩潰了昌阿,主動拉起小程序饥脑,那如何拉起小程序呢?這里我比較簡單得做了一個處理懦冰,即通過appium去事先獲取到小程序入口的坐標傳給monkey好啰。然后在MonkeyActivity.java文件里使用intent啟動另外應用的時候進行判斷,判斷intent消息里compnent中packeagename是否是另外一個應用的包名?若是儿奶,則再重新拉起小程序,若不是鳄抒,那就不處理闯捎。同時為了讓monkey操作過程中可以進行內(nèi)存泄露和實時截圖,這里再引入另外兩個工具:procrank和minicap许溅。這兩個工具不在monkey里引用瓤鼻,而是通過python腳本,使用啟用三個線程贤重,分別執(zhí)行monkey命令茬祷、使用procrank進行內(nèi)存監(jiān)控、使用minicap工具進行實時截圖并蝗。
? ? 通過上述幾個過程祭犯,我們就可以更精確地保證monkey事件的有效執(zhí)行,從而實現(xiàn)monkey的場景化壓力測試滚停。