想到平時(shí)想用adb 我就忍不住去翻開(kāi)筆記,腦子記不住,不好使,不知道大家有沒(méi)有這個(gè)想法呢,不管你有沒(méi)有,反正我有了,ttm,太煩人了,于是乎,我就開(kāi)始給自己寫(xiě)個(gè)需求文檔,

這就是我寫(xiě)的,產(chǎn)品需求,合理不,管他合不合理,我看著能舒服就可以,

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開(kāi)發(fā)培訓(xùn)

其實(shí)做出來(lái)的真實(shí)的效果圖差很遠(yuǎn),待會(huì)會(huì)給你們展示的,這里我要說(shuō)的是電量和幀率展示這個(gè)版本沒(méi)有坐進(jìn)來(lái),沒(méi)有考慮pass值不存在的情況,因?yàn)橛行〢PP或許沒(méi)有,

既然有了需求,那么開(kāi)始寫(xiě)代碼吧。我選擇python3.6.1 (備注:這里不支持python2.7)

下面來(lái)展示下代碼,先看獲取值的代碼

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開(kāi)發(fā)培訓(xùn)

import os,time,platform,timedef starttime_app(packagename,packagenameactivicy):#啟動(dòng)耗時(shí)
    cmd='adb shell am start -W -n %s'%packagenameactivicy
    me=os.popen(cmd).read().split('\n')[-7].split(':')#獲取啟動(dòng)時(shí)間
    cmd2='adb shell am force-stop %s'%packagename
    os.system(cmd2)    return medef makesure_system():    if platform.system =='Windows':
        find='findstr'
    else:
        find='grep'def liulang(packagename):
    cmd='adb shell cat /data/system/packages.list | findstr %s'%packagename
    cm=os.popen(cmd).read().split()[1]
    cmd1='adb shell cat /proc/net/xt_qtaguid/stats | findstr %s'%cm
    me1_shou=os.popen(cmd1).read().split()[5]#接受
    me2_shou=os.popen(cmd1).read().split()[7]#上傳
    cmd2='adb shell cat /proc/net/xt_qtaguid/stats | findstr %s'%cm
    me1_xia=os.popen(cmd1).read().split()[5]#接受
    me2_xia=os.popen(cmd1).read().split()[7]#上傳
    liulang_sum_1=(int(me1_shou)+int(me2_shou))#過(guò)程產(chǎn)生流量計(jì)算為執(zhí)行后的流量-執(zhí)行前的流量,
    liulang_sum_xia=(int(me1_xia)+int(me2_xia))
    liulang_sum=int(liulang_sum_xia)-int(liulang_sum_1)
    me1=int(me1_xia)-int(me1_shou)
    me2=int(me2_xia)-int(me2_shou)    return me1 ,me2,liulang_sumdef caijicpu(packagename):#這里采集的cpu時(shí)候可以是執(zhí)行操作采集 就是-n  -d  刷新間隔
    cpu='adb shell top -n 1| findstr %s'%packagename
    re_cpu=os.popen(cpu).read().split()[2]    return re_cpudef getnencun(packagename):#Total 的 PSS 信息內(nèi)存
    cpu='adb shell  dumpsys  meminfo %s'%packagename
    re_cpu=os.popen(cpu).read().split()[118]    return re_cpudef huoqufps(packagename):
    cmd ='adb shell dumpsys gfxinfo packagename '#獲取fpsdef adb_monkey(packagename,s_num,throttle,pct_touch,pct_motion,pct_trackball,pct_nav,pct_syskeys,pct_appswitch,num,logfilepath):
    cmden='adb shell monkey -p %s -s %s --throttle %s --pct-touch %s --pct-motion %s  --pct-trackball  %s  --pct-trackball %s  --pct-syskeys  %s  --pct-appswitch  %s --ignore-crashes --ignore-timeouts --monitor-native-crashes  -v -v -v %s >%s'%(packagename,s_num,throttle,pct_touch,pct_motion,pct_trackball,pct_nav,pct_syskeys,pct_appswitch,num,logfilepath)
    os.popen(cmden)def huoqushebeizhuangtai():
    cmd1='adb get-state'
    devices_status=os.popen(cmd1).read().split()[0]    return devices_statusif __name__ == '__main__':    print(getnencun('com.tencent.mobileqq'))

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開(kāi)發(fā)培訓(xùn)

目前所有的數(shù)據(jù)的采集全部使用adb 來(lái)采集的,采集后呢,我這里使用了zuilow的分割辦法來(lái)取值。

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開(kāi)發(fā)培訓(xùn)

from ab_python import starttime_app,adb_monkey,huoqushebeizhuangtai,caijicpu,liulang,getnencunimport tkinter ,threadingfrom time import sleepfrom tkinter import messagebox,ttkfrom tkinter import *from py_excel import qidongceshi,getcpudef qidongapp():
    start_tim=[]
    cishu=[]
    status_shebei=huoqushebeizhuangtai()    if status_shebei =='device':
        packname=baoming_t.get('0.0',END)
        acti=activ_t.get('0.0',END)
        cish=cishu_ac.get()        if len(acti)<=1 or len(packname)<=1:
            messagebox.showinfo('提醒','包命或者包名activity不能為空')        else:            if len(cish)<=1:
                messagebox.showinfo('提醒','次數(shù)不能為空')            else:
                i=0
                e1['state']= 'normal'
                e1.delete(1.0,tkinter.END)
                sum=0                for i in range(int(cish)):
                    start_time=starttime_app(packagename=packname,packagenameactivicy=acti)
                    start_tim.append(int(start_time[1]))

                    cishu.append(i)                    if start_time is None:
                        messagebox.showwarning('警告','請(qǐng)檢查您輸入的包或者包的啟動(dòng)activity')                        break
                    text='第%s次啟動(dòng)時(shí)間:%s'%(i+1,start_time[1])
                    sum+=int(start_time[1])
                    e1['state']= 'normal'
                    e1.insert(tkinter.END,text)
                    e1.insert(tkinter.END,'\n')
                    e1.see(END)
                    btn_start['state']= 'disabled'
                e1.insert(tkinter.END,('平均用時(shí):%s'%(sum/int(cish))))
                qidongceshi(cishu=cishu,start=start_tim)
                messagebox.showinfo('提示','測(cè)試報(bào)告已經(jīng)生成,請(qǐng)到當(dāng)前目錄查看')
                e1['state']= 'disabled'
                btn_start['state']= 'normal'
                messagebox.showinfo('通知','測(cè)試已經(jīng)完成')    else:
        messagebox.showerror('警告','設(shè)備連接異常')def monkey_app():
    status_shebei=huoqushebeizhuangtai()    if status_shebei =='device':        try:
            packname=baoming_t1.get('0.0',END).split()[0]
            zhongzi=zhongzi_t.get('0.0',END).split()[0]
            time=time_t.get().split()[0]
            touch=touch_t.get('0.0',END).split()[0]
            huadong=huadong_t.get('0.0',END).split()[0]
            guiji=guiji_t.get('0.0',END).split()[0]
            xitong=xitong_t.get('0.0',END).split()[0]
            acti=acti_t.get('0.0',END).split()[0]
            event=event_t.get('0.0',END).split()[0]
            log=log_t.get('0.0',END).split()[0]
            danghang=danghang_t.get('0.0',END).split()[0]            if len(packname)<=5:
                messagebox.showwarning('提醒','請(qǐng)正確填寫(xiě)包名')            if int(touch)+int(huadong)+int(guiji)+int(danghang)+int(xitong)+int(acti) >100:
                messagebox.showerror('提醒','您輸入的所有的事件的比例和不能超過(guò)100%')            # btn_monkey['state']= 'disabled'
            adb_monkey(packagename=packname,s_num=zhongzi,throttle=time,pct_touch=touch,pct_motion=huadong,pct_trackball=guiji,pct_nav=danghang,pct_syskeys=xitong,pct_appswitch=acti,num=event,logfilepath=log)            # messagebox.showinfo('通知',('測(cè)試完畢,日志存放:%s'%log))
            # btn_monkey['state']= 'normal'
        except :
            messagebox.showwarning('警告','必須填寫(xiě)monkey相關(guān)數(shù)據(jù)')    else:
        messagebox.showwarning('警告','設(shè)備連接異常 請(qǐng)重新連接設(shè)備!')def cpu_app():
    status_shebei=huoqushebeizhuangtai()    if status_shebei =='device':
        xingneng_bao=xingneng_baoming.get('0.0',END).split()[0]
        xing=xing_t.get()        if len(xingneng_bao)<=5:
            messagebox.showwarning('警告','請(qǐng)檢查您的包名')
        cishu_list=[]
        cpu_list=[]
        rescv_list=[]
        send_list=[]
        total_list=[]
        pass_list=[]
        i=0        for i in range(int(xing)):
            nen_cun=getnencun(xingneng_bao)

            rescv,send,liulang_sum=liulang(xingneng_bao)
            cpu_caiji=caijicpu(xingneng_bao)
            neicun_t['state']= 'normal'
            pass_list.append(int(nen_cun))
            neicun_t.insert(tkinter.END,('Pass值:%s'%nen_cun))
            neicun_t.insert(tkinter.END,'\n')
            neicun_t.see(END)
            neicun_t['state']= 'disabled'
            cpu_t['state']= 'normal'
            cpu_list.append(int(cpu_caiji.split('%')[0]))
            cpu_t.insert(tkinter.END,('CPU占有率:%s'%cpu_caiji))
            cpu_t.insert(tkinter.END,'\n')
            cpu_t.see(END)
            cpu_t['state']= 'disabled'
            liulang_t['state']= 'normal'
            total_list.append(int(liulang_sum))
            rescv_list.append(int(rescv))
            send_list.append(int(send))
            liulang_t.insert(tkinter.END,('總流量:%sk,上傳流量:%sk,下載流量:%sk'%(liulang_sum,rescv,send)))
            liulang_t.insert(tkinter.END,'\n')
            liulang_t.see(END)
            liulang_t['state']= 'disabled'
            xingneng_btn['state']= 'disabled'
            i+=1
            cishu_list.append(int(i))
        getcpu(cishu=cishu_list,start_cpu=cpu_list,recv_list=rescv_list,send_list=send_list,total_list=total_list,Pass_list=pass_list)
        xingneng_btn['state']= 'normal'
        messagebox.showinfo('提醒','測(cè)試完畢,測(cè)試報(bào)告已經(jīng)生成!')    else:
        messagebox.showwarning('警告','設(shè)備連接異常 請(qǐng)重新連接設(shè)備!')def teread():    for i in range(1):
        t=threading.Thread(target=cpu_app,args=())
        t.start()def teread_start():    for i in range(1):
        t=threading.Thread(target=qidongapp,args=())
        t.start()if __name__ == '__main__':    try:
        status_shebei=huoqushebeizhuangtai()        if status_shebei =='device':
            root=tkinter.Tk()
            root.title('雷子的安卓adb小工具')            # root.geometry("1000x900")
            # root.resizable(width=False, height=False)
            tkinter.Label(root,text='性能參數(shù)展示',fg='red',font=("黑體", 15, "bold"),).grid(row=0,column=3)
            cpu_t=tkinter.Text(root,height=5,width=30)
            cpu_t.grid(row=1,column=2)
            liulang_t=tkinter.Text(root,height=5,width=40)
            http://www.cnblogs.com/leiziv5/p/7027938.html