<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    Android 應用性能測試方案一之 log 分析

     今天我主要來說下過年時候自己做的一些性能測試,由于時間緊迫,所以最終選擇了全部從log方面入手,從而最終達到一氣呵成的效果。
      分別有這樣幾個大項:
      1. Android應用啟動消耗時間
      我們分別在Activity的生命周期方法內添加Log.e(tag,message),如下效果:
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.e("AppStartTime","AppOnCreate");
    ...
    }
    @Override
    protected void onResume() {
    super.onResume();
    Log.e("AppStartTime","AppOnResume");
    ...
    }
      ,這里的tag我們使用AppStartTime,那么我們需要在應用啟動之后在command內輸入:
      adb logcat -v time -v threadtime *:E | grep ActivityStartTime>StartTimeFile.txt
      2. cpu和內存消耗
      在command中輸入如下命令:
      adb shell top -n 400 | grep <your package name>Cpu_MemoryFile.txt
      3. GC
      在command中輸入如下命令:
      adb logcat -v time -v threadtime *:D | grep GC>GCFile.txt
      這里需要注意的是,GC分析的時候需要關注三個值。
      average_GC_Freed
      average_GC_per
      average_GC_time
      4. 網絡流量
      在被測應用中增加一個獲取所有應用的網絡流量的service,添加一個getAppTrafficList( )方法,代碼如下:
    publicvoidgetAppTrafficList(){
    PackageManagerpm=getPackageManager();
    List<PackageInfo>pinfos=pm
    .getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES
    |PackageManager.GET_PERMISSIONS);
    for(PackageInfoinfo:pinfos){
    String[]premissions=info.requestedPermissions;
    if(premissions!=null&&premissions.length>0){
    for(Stringpremission:premissions){
    if("android.permission.INTERNET".equals(premission)){
    intuId=info.applicationInfo.uid;
    longrx=TrafficStats.getUidRxBytes(uId);
    longtx=TrafficStats.getUidTxBytes(uId);
    if(rx<0||tx<0){
    continue;
    }else{
    Log.e("網絡流量",info.applicationInfo.loadLabel(pm)+Formatter.formatFileSize(this,rx+tx)
    }
    }
    }
    }
    }
    }
     如果還要其他數據,那么全部可以按照以上的方法去獲取。然后我們來看如何使用python一次性分析這些文件從而直接獲取report。
      首先引入第三方繪制pdf的模塊:
      # -*- coding: utf-8 -*-
      from reportlab.graphics.shapes import *
      from reportlab.graphics.charts.lineplots import LinePlot
      from reportlab.graphics.charts.textlabels import Label
      from reportlab.graphics import renderPDF
      然后我們需要一個讀文件的方法:
      def FileRead(path):
      data_list = []
      number_list = []
      number = 0
      for line in open(path):
      data_list.append(line)
      number =number+1
      number_list.append(number)
      return data_list,number_list
      接著我們需要一個制作pdf的方法:
    def MakePDF(times,list,reportname,pdfname):
    drawing = Drawing(500,300)
    lp = LinePlot()
    lp.x = 50
    lp.y = 50
    lp.height = 125
    lp.width = 300
    lp.data = [zip(times, list)]
    lp.lines[0].strokeColor = colors.blue
    lp.lines[1].strokeColor = colors.red
    lp.lines[2].strokeColor = colors.green
    drawing.add(lp)
    drawing.add(String(350,150, reportname,fontSize=14,fillColor=colors.red))
    renderPDF.drawToFile(drawing,pdfname,reportname)
    #這里的times和list兩個參數都是list,是時間和監控獲取的數據一一對應的關系
    這些我們都有了之后,我們來看下分析AppStartTime的方法:
    def analysisStartFile(list):
    totalcount =0
    totaltime =0
    time_list =[]
    totalcount_list = []
    for i in range(len(list)):
    if 'AppStartTime' in list[i]:
    totalcount =totalcount+1
    totalcount_list.append(totalcount)
    if float(list[i+4].split(' ')[1][-6:])-float(list[i].split(' ')[1][-6:])>0:
    totaltime=totaltime+float(list[i+4].split(' ')[1][-6:])-float(list[i].split(' ')[1][-6:])
    time_list.append(float(list[i+4].split(' ')[1][-6:])-float(list[i].split(' ')[1][-6:]))
    return totalcount_list,'%.2f'%float(totaltime/totalcount),time_list
      所有的分析數據的思維都是使用split()方法分隔空格之后做分析。因為讀取文件之后是將所有的數據存在list中,但是當我們去用的時候由于空格在其中就變得非常的麻煩,那么我們可以先使用split將空格去掉,然后使用if key in list的方法進行過濾再做分析。
      最后在main()方法中基本就是如下的順序執行方法:
      if __name__== '__main__':
      list1,list2 = FileRead(<your file path>)
      print list1,list2
      list_count,average_start_time,time_list = analysisStartFile(list1)
      MakePDF(list_count,time_list,'average time:'+str(average_start_time)+'s',"啟動性能報告.pdf")
      最終我們就能夠批量的生成如下圖的報告了。

    posted on 2014-12-03 13:49 順其自然EVO 閱讀(311) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

    <2014年12月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久国产精品免费一区| 亚洲AV无码专区在线播放中文 | 亚洲午夜国产片在线观看| 亚洲av午夜精品无码专区| 四虎在线视频免费观看视频| 久久亚洲国产伦理| 男的把j放进女人下面视频免费| 国产日韩亚洲大尺度高清| 免费久久人人爽人人爽av| 久久亚洲精品中文字幕三区| 成在人线av无码免费高潮喷水| 日韩亚洲变态另类中文| A片在线免费观看| 亚洲精品熟女国产| 免费人成视频在线| 亚洲av日韩综合一区二区三区| 国产黄色片在线免费观看| 香港特级三A毛片免费观看| 红杏亚洲影院一区二区三区| 黄页免费在线观看| 337p欧洲亚洲大胆艺术| 四虎永久在线精品免费网址 | 成人免费视频试看120秒| 亚洲国产精品无码久久| 波多野结衣一区二区免费视频| xxxxx做受大片在线观看免费| 国产精品亚洲成在人线| 免费AA片少妇人AA片直播| 日本系列1页亚洲系列| 国产亚洲精品观看91在线| 精品免费人成视频app| 亚洲精品无码少妇30P| 中文字幕亚洲专区| 国产精品色拉拉免费看| 羞羞视频免费观看| 久久久久亚洲av无码专区喷水 | 亚洲高清无码综合性爱视频| 国产成人AV免费观看| 亚洲依依成人亚洲社区| 亚洲日本va在线视频观看| 在人线av无码免费高潮喷水|