文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android 应用性能测试方案一之 log 分析

2022-06-06 12:57

关注

  我主要来说下过年时候自己做的一些性能测试,由于时间紧迫,所以终选择了全部从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")   终我们能够批量的生成如下图的报告了。

 


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯