monkey壓測(cè)曲線展示app性能圖

monkey 壓力測(cè)試android

Monkey的特征

  • 測(cè)試的對(duì)象僅為應(yīng)用程序包竟稳,有一定的局限性置吓。
  • Monkey測(cè)試使用的事件流數(shù)據(jù)流是隨機(jī)的匠题,不能進(jìn)行自定義。
  • 可對(duì)MonkeyTest的對(duì)象眶诈,事件數(shù)量涨醋,類型,頻率等進(jìn)行設(shè)置逝撬。

Monkey的基本用法

  • 基本語(yǔ)法如下:
    • $ adb shell monkey [options]
    • 如果不指定options浴骂,Monkey將以無(wú)反饋模式啟動(dòng),并把事件任意發(fā)送到安裝在目標(biāo)環(huán)境中的全部包宪潮。下面是一個(gè)更為典型的命令行示例溯警,它啟動(dòng)指定的應(yīng)用程序,并向其發(fā)送500個(gè)偽隨機(jī)事件:
    • $ adb shell monkey -p your.package.name -v 500

分析日志

  • 通過(guò)Android trace文件分析死鎖ANR實(shí)例過(guò)程
  • system/build.prop 日志文件主要記錄手機(jī)系統(tǒng)信息狡相,如版本梯轻,型號(hào),品牌
  • adb logcat 導(dǎo)出日志文件

monkey.ini 配置文件

cmd=adb shell monkey -p com.dgm.user --throttle 500 --ignore-timeouts --ignore-crashes   --monitor-native-crashes -v -v
package_name=com.dgm.user
logdir=d:\android
remote_path=d:\android_server
phone_msg_log=d:\android_temp\phone.txt
sum = 100 -
activity = com.dgm.user.SplashActivity
exceptions=['NullPointer','IllegalState','IllegalArgument','ArrayIndexOutOfBounds','RuntimeException','SecurityException'] 
  • throttle 每次事件等待500毫秒
  • sum 定義隨機(jī)事件數(shù)
  • exceptions 異常定義尽棕,用于后面擴(kuò)展

結(jié)果生成為可視化圖片 使用的是matplotlib

Paste_Image.png
  • 當(dāng)然可以看日志文件

代碼分析

  • 獲得cpu-men
# -*- coding: utf-8 -*-
import subprocess
pkg_name = "com.dgm.user"
cpu = []
men = []
def top_cpu(pkg_name):
    cmd = "adb shell dumpsys cpuinfo | grep " + pkg_name
    temp = []
    # cmd = "adb shell top -n %s -s cpu | grep %s$" %(str(times), pkg_name)
    top_info = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.readlines()
    for info in top_info:
        temp.append(info.split()[2].decode()) # bytes轉(zhuǎn)換為string
        # print("cpu占用:%s" %cpu)
    for i in temp:
         if i != "0%":
            cpu.append(i.split("%")[0])
    return cpu

def get_men(pkg_name):
    cmd = "adb shell  dumpsys  meminfo %s"  %(pkg_name)
    print(cmd)
    temp = []
    m = []
    men_s = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.readlines()
    for info in men_s:
        temp.append(info.split())
        # print("內(nèi)存占用:%s" %men[19][1].decode()+"K")
    m.append(temp)
    for t in m:
        men.append(t[19][1].decode())
    return men
  • 入口代碼
import monkeyConfig
from adb_common import AndroidDebugBridge as ai
import matplotlibBase as mt
import MenCpu as m
import datetime as dt
CPU = [[],[]] # time,使用情況
MEN = [[],[]] #當(dāng)前時(shí)間喳挑,和內(nèi)存使用情況
# 得到手機(jī)信息
def getPhoneMsg(cmd_log):
    l_list = []
    f = open(cmd_log, "r")
    lines = f.readlines()
    for line in lines:
        line = line.split('=')
        #Android 系統(tǒng),如anroid 4.0
        if (line[0] == 'ro.build.version.release'):
            l_list.append(line[1])
            #手機(jī)名字
        if (line[0]=='ro.product.model'):
            l_list.append(line[1])
            #手機(jī)品牌
        if (line[0]=='ro.product.brand'):
            l_list.append(line[1])
    f.close()
    return l_list

#開(kāi)始腳本測(cè)試
def start_monkey(cmd, logdir, now1, logcatname):
    print(cmd)
    os.popen(cmd)
    # os.kill()
    #print"使用Logcat導(dǎo)出日志"
    cmd2 = "adb logcat -d >%s" % logcatname
    os.popen(cmd2)
    #print"導(dǎo)出traces文件"
    tracesname = logdir + "\\" + now1 + r"traces.log"
    cmd3 = "adb shell cat /data/anr/traces.txt>%s" % tracesname
    os.popen(cmd3)

if __name__ == '__main__':
    ini_file = 'monkey.ini'
    if os.path.isfile(ini_file):
        if ai().attached_devices():
            mc = monkeyConfig.baseReadnin(ini_file)
            ai().open_app(mc.get_package_name(), mc.get_activity())
            os.system('adb shell cat /system/build.prop >'+mc.get_phone_msg_log()) #存放的手機(jī)信息
            ll_list = getPhoneMsg(mc.get_phone_msg_log())
            # monkey開(kāi)始測(cè)試
            sum = mc.get_sum()
            temp = ""
            monkeylog = ""
            start_monkey(mc.get_cmd(), mc.get_logdir(), mc.get_now(), mc.get_logcatname())
            for i in range(sum):
                time.sleep(1)
                print(i)
                dn = dt.datetime.now()
                CPU[0].append(dn)
                m.top_cpu(mc.get_package_name())
                MEN[0].append(dn)
                m.get_men(mc.get_package_name())
                monkeylog = open(mc.get_logdir() + "\\" + mc.get_now()+"monkey.log")
                temp = monkeylog.read()
                monkeylog.close()
                if temp.count('Monkey finished')>0:
                    print("測(cè)試完成咯")
                    CPU[1].append(m.cpu)
                    MEN[1].append(m.men)
                    # geterror(ll_list, mc.get_log(), mc.get_remote_path(), mc.now) 錯(cuò)誤顯示
                    mt.cpu_men_plots(CPU, MEN)
                    break
        else:
            print("設(shè)備不存在")
    else:
        print(u"配置文件不存在"+ini_file)
  • 結(jié)果以曲線圖展示
def cpu_men_plots(cpu, men):
    import matplotlib.pyplot as pl
    import matplotlib.dates as mdates
    import datetime

    # 處理異常數(shù)據(jù)滔悉,有時(shí)候得到數(shù)據(jù)(占用情況)會(huì)比時(shí)間多一次循環(huán)的數(shù)據(jù)蟀悦,造成xy的數(shù)據(jù)不一致,而引起報(bào)錯(cuò)
    if len(cpu[0]) != len(cpu[1][0]):
        cpu[1][0]= cpu[1][0][0:len(cpu[0])]

    if len(men[0]) != len(men[1][0]):
        men[1][0]= men[1][0][0:len(men[0])]
    print(men[0])
    print(men[1][0])
    a1 = pl.subplot(311)
    a1.set_title("CPU")
    a1.set_ylabel("占用情況%")
    a1.plot(cpu[0], cpu[1][0])
    a1.xaxis.set_major_locator(mdates.SecondLocator(interval=1))
    a1.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))

    a2 = pl.subplot(312)
    a2.set_title("內(nèi)存")
    a2.set_ylabel("使用情況 K")
    a2.plot(men[0], men[1][0])
    a2.xaxis.set_major_locator(mdates.SecondLocator(interval=2))
    a2.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))

    # a3 = pl.subplot(313)
    # a3.set_title("流量")
    # a3.set_ylabel("使用情況 K")
    # a3.plot(x,list2)
    # a3.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))

    # a1.margins(x=0.2)
    pl.tight_layout()
    pl.show()

更多請(qǐng)參考我的源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末氧敢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子询张,更是在濱河造成了極大的恐慌孙乖,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異唯袄,居然都是意外死亡弯屈,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門恋拷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)资厉,“玉大人,你說(shuō)我怎么就攤上這事蔬顾⊙绯ィ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵诀豁,是天一觀的道長(zhǎng)窄刘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)舷胜,這世上最難降的妖魔是什么娩践? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮烹骨,結(jié)果婚禮上翻伺,老公的妹妹穿的比我還像新娘。我一直安慰自己沮焕,他們只是感情好吨岭,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著遇汞,像睡著了一般未妹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上空入,一...
    開(kāi)封第一講書(shū)人閱讀 52,696評(píng)論 1 312
  • 那天络它,我揣著相機(jī)與錄音,去河邊找鬼歪赢。 笑死化戳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的埋凯。 我是一名探鬼主播点楼,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼白对!你這毒婦竟也來(lái)了掠廓?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤甩恼,失蹤者是張志新(化名)和其女友劉穎蟀瞧,沒(méi)想到半個(gè)月后沉颂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悦污,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年铸屉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片切端。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡彻坛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出踏枣,到底是詐尸還是另有隱情昌屉,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布椰于,位于F島的核電站怠益,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏瘾婿。R本人自食惡果不足惜蜻牢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望偏陪。 院中可真熱鬧抢呆,春花似錦、人聲如沸笛谦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)饥脑。三九已至恳邀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間灶轰,已是汗流浹背谣沸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笋颤,地道東北人乳附。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像伴澄,于是被迫代替她去往敵國(guó)和親赋除。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容