Android 应用性能测试方案一之 log 分析
2015-01-22 10:30
441 查看
今天我主要来说下过年时候自己做的一些性能测试,由于时间紧迫,所以最终选择了全部从log方面入手,从而最终达到一气呵成的效果。
分别有这样几个大项:
1. Android应用启动消耗时间
我们分别在Activity的生命周期方法内添加
,这里的
2. cpu和内存消耗
在command中输入如下命令:
3. GC
在command中输入如下命令:
这里需要注意的是,GC分析的时候需要关注三个值。
average_GC_Freed
average_GC_per
average_GC_time
4. 网络流量
在被测应用中增加一个获取所有应用的网络流量的service,添加一个
如果还要其他数据,那么全部可以按照以上的方法去获取。然后我们来看如何使用python一次性分析这些文件从而直接获取report。
首先引入第三方绘制pdf的模块:
然后我们需要一个读文件的方法:
接着我们需要一个制作pdf的方法:
这些我们都有了之后,我们来看下分析AppStartTime的方法:
所有的分析数据的思维都是使用split()方法分隔空格之后做分析。因为读取文件之后是将所有的数据存在list中,但是当我们去用的时候由于空格在其中就变得非常的麻烦,那么我们可以先使用split将空格去掉,然后使用if key in list的方法进行过滤再做分析。
最后在main()方法中基本就是如下的顺序执行方法:
最终我们就能够批量的生成如下图的报告了。
adb logcat -v time -v threadtime *:E | grep ActivityStartTime>StartTimeFile.txt
这个 ActivityStartTime 是不是应该是 AppStartTime
分别有这样几个大项:
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( )方法,代码如下:
public void getAppTrafficList() { PackageManager pm = getPackageManager(); List<PackageInfo> pinfos = pm .getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES | PackageManager.GET_PERMISSIONS); for (PackageInfo info : pinfos) { String[] premissions = info.requestedPermissions; if (premissions != null && premissions.length > 0) { for (String premission : premissions) { if ("android.permission.INTERNET".equals(premission)) { int uId = info.applicationInfo.uid; long rx = TrafficStats.getUidRxBytes(uId); long tx = 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")
最终我们就能够批量的生成如下图的报告了。
adb logcat -v time -v threadtime *:E | grep ActivityStartTime>StartTimeFile.txt
这个 ActivityStartTime 是不是应该是 AppStartTime
相关文章推荐
- Android应用测试性能的工具Emmagee,导出文件格式问题分析
- 分析android应用性能
- 性能测试应用领域分析
- android平台应用性能测试之CPU和内存占用
- Android应用性能分析
- PAAS平台的web应用性能测试与分析
- Android应用性能优化方案
- Android应用性能优化之绘图分析
- android_测试分析(monkey,monekyrunner,uiautomator,Robotium,单元测试,启动性能)cts测试
- Android应用性能测试
- android应用性能优化方案
- Android应用性能优化之分析工具[二]
- Android应用性能测试
- 晒一下我培训的课程——应用系统性能测试规划、实施与分析
- [原创] android应用性能测试之CPU和内存占用
- Android应用开发之性能测试之TraceView
- Android应用开发之性能测试之TraceView
- Android应用性能测试(客户端-服务端)平台实现
- PAAS平台的web应用性能测试与分析
- 性能测试之应用服务器计数器分析方法