利用GT做iOS App性能测试,收集数据,生成测试报告

前言
在App竞争越来越激烈的今天,iOS App的各项性能如CPU、内存消耗、卡顿情况等,在开发测试过程中越来越受到重视。在我近期参与的新项目中,就有App性能测试的需求,我们利用了GT这款工具,可做到快速完成性能测试、并得到想要的性能指标。
GT是一款腾讯自研推出的性能测试工具,直接运行在手机上,可对APP进行快速的性能测试(CPU、内存、流量、电量、帧率/流畅度等等)、开发日志的查看、Crash日志查看、网络数据包的抓取、APP内部参数的调试、真机代码耗时统计等。还可以利用GT提供的基础API自行开发有特殊功能的GT插件,解决更加复杂的APP调试问题。由于它的运行脱离了电脑,所以利用GT,可以轻松完成App的场测。
GT支持iOS和Android两个手机平台,本篇主要介绍在iOS App中集成GT、采集性能数据、生成测试报告。iOS版是一个Framework包,必须嵌入APP工程,编译出带GT的APP才能使用,iPhone和iPad应用都能支持。
在App中集成GT
第1步
导入GT.embeddedframework(直接拖拽进去),包含 framework 和 bundle 资源包
完成后检查下,确保Link Binary With Livraries 和 Copy Bundle Resources 两处都成功添加了
第2步
添加 GT.embeddedframework 所需引用的系统 framework,如下:
libz.dylib
libsqlite3.dylib
Security.framework
CoreTelephony.framework
AdSupport.framework
AudioToolbox.framework
SystemConfiguration.framework
QuartzCore.framework
CoreGraphics.framework
UIKit.framework
第3步
在 AppDelegate 引用头文件:
#include <GT/GT.h>

第4步
在 AppDelegate 的 application:didFinishLaunchingWithOptions:应用完成处 理后调用 GT 初始化
-(BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 省略相关代码
// GT Usage(合入) 初始化 GT_DEBUG_INIT;
return YES;
}

第5步
最后,我们需要将GT收集到的性能数据导出来,需要设置文件共享,方法:在info.plist中添加一个Application supports iTunes file sharing 并设置为YES,这样就可以共享app的文件

编译出带有GT的App,并执行测试

点击悬浮图标进入GT界面
测试前点击开始按钮,测试完成后保存日志

上面只是最基本的用法,更多的方法和接口请参考GT官方文档:http://gt.tencent.com/docs.html
导出性能数据并进行处理
完成测试后,可使用iTools将性能测试文件(应用文件共享Documents/GT/下)导出到电脑上,导出文件例如:

拿到这些性能测试后,我们需要对它进行处理
GT生成的数据是零散的列表,为了更好的展示性能指标变化情况,我们需要绘制图标。为了更减少人工操作,我编写vba脚本来自动读取数据并生成测试报告,处理步骤如下:
  • 自动从配置目录中读入csv文件的数据到excel中
  • 分类处理CPU、内存、SM、电量、NetWork数据
  • 自动生成折线图
附上带有宏的excel:GT导出数据用vba脚本处理.zip
生成的图表如下:


最后,列出在学习GT过程中的整理,供大家参考
1、Para.可测性能指标(参数):
  • CPU
  • 内存 Memory
  • 流量 Network
  • 电量 Battery
  • 帧率/流畅度 App Smoothness
GT流畅度和Instrument帧率的差别
  • GT流畅度(SM):表示app有能力达到1s多少帧(越高越流畅)
  • Instrument帧率:1s内实际有多少帧
总结来说,GT流畅度的值肯定高于Instrument帧率,当app有能力发挥到极限的时候,这两个值相等。能力发挥到极限的意思是,app快速刷新,达到箱单高能力下可卡到的最高帧率,比如快速滑动的时候。
GT流畅度(SM)和Instrument帧率值一样的例子:
  • app很卡,两个值都是个位数;
  • app不卡,快速滑动界面,两个值都是50多。
GT流畅度(SM)和Instrument帧率值不一样的例子:
  • app不操作,这时候有能力达到最高帧率,但并没有一直刷新,因此GT流畅度值是60(最高值),但Intrument帧率值是0;
  • app慢慢拖动列表,这时不卡,因此GT流畅度是60,,但是因为拖动很慢帧率并不高,Intrument帧率只有20-30。
2、Profiler性能分析(耗时):
  • 统计代码耗时:展示用户自定义的分析项的统计结果
  1. 单张图片的下载时间
  2. 若干图片的下载总时间
3、Log开发日志(日志):
  • 开发日志的查看:debug、info、warning、error
  • 打印日志:网络访问异常时打印日志
4、Plugin扩展功能(插件):
  • Crash插件:Crash日志查看,发生Crash时自动保存日志
  • GTPcap插件:网络数据包的抓取,采用tcpdump抓包,可自定义抓包参数,需注意:抓包手机需要越狱,只支持iOS6
  • Sandbox(沙箱):显示App沙箱内所有文件
  • NSlog插件:APP内部参数的调试
  • 自定义插件的开发:可使用所有 GT 提供的开放接口( GT 的出入参数、悬浮窗日志系统内存 /CPU/CPU /CPU值的获取,启动值的获取,启动/停止抓包等),详情参见插件开发文档。 
5、Setting(设置):
  • 设置悬浮窗
  • 设置日志开关、自动保存开关:文件名0-9共10个文件循环保存,每个最大1M
  • 设置出参的监控频率,调大监控频率:默认1s,范围0.1~10s
6、GT目录说明:
  • 保存在沙箱目录下。
  • 自动保存日志目录: Documents/GT/sys
  • 手动保存日志目录: Documents/GT/Log
  • 手动保存性能日志目录: Documents/GT/Profiler
  • 抓包保存目录: Documents/GT/Plugin/pcap
  • NSLog 保存目录: Documents/GT/Plugin/nslog
  • Crash 日志保存目录: Documents/GT/Plugin/crash
  • 出参保存目录:Documents/GT/Para

本文来自网易实践者社区,经作者hzhanxiao授权发布。