背景
随着iOS16系统的正式推出,用户升级到iOS的量级也在不断增加,最近一段时间有用户反馈在iOS16系统上播放视频、音频有明显的发热和卡顿。所以我们也把iOS16的性能测试提到了日程上了,但是由于我们之前使用的性能测试工具已经无法支撑日常工作了。
尝试了最新版本收费的Pefdog性能狗是可以采集iOS16系统的性能数据,但是就是收费。
.
所以基于业务需求,需要找到一款免费、数据置信、使用简单的性能采集工具,本文就介绍下如何对iOS16性能数据采集。
调研
IDE工具
一般研发同学看性能数据都会使用Android Studio & Xcode,这类IDE编码工具中的性能采集模块来看性能数据。
Android Studio工具:
Xcode工具:
优点:
1、数据采集准确: 可以兼容不同系统型号的设备进行数据采集,采集CPU、内存、FPS等指标都非常精准。
2、深入性能剖析: 可以深入进行性能剖析,某些场景下CPU耗时的高是哪些方法调用的时间分布及调用链路是什么都可以清晰的看到,适合研发排查性能问题。
缺点:
1、需要源码编译才能性能采集数据: 需要有Android或者iOS项目的源代码进行编写后才能进行性能采集数据。
2、安装配置较为麻烦: 需要配置Android SDK、java环境、Xcode依赖等环境。
第三方库
在App中可以集成第三库来采集性能数据,通过debug面板展示性能数据,比如: 滴滴开源 DoraemonKit、腾讯GT等。
DoraemonKit
DoraemonKit是滴滴开发的一款功能齐全的客户端(iOS、Android)研发助手。
性能采集支持:
- 帧率监控: App 帧率信息提供波形图查看功能,让帧率监控的趋势更加明显。
- CPU 监控: App CPU 使用率信息提供波形图查看功能,让 CPU 监控的趋势更加形象。
- 内存监控: App 内存使用量信息提供波形图查看功能,让内存监控的趋势更加鲜明。
如果感兴趣的同学可以看下官网: https://github.com/didi/DoKit
腾讯GT
GT是APP的随身调测平台,它是直接运行在手机上的“集成调测环境”(IDTE, Integrated Debug&Test Environment)。 利用GT,仅凭一部手机,无需连接电脑,您即可对APP进行快速的性能测试(CPU、内存、流量、电量、帧率/流畅度等等)、 开发日志的查看、Crash日志查看、网络数据包的抓取、APP内部参数的调试、真机代码耗时统计等等。
使用文档: http://gt.qq.com/docs.html
官方下载: http://gt.qq.com/download.html
如下图是在网上找到GT使用图片,另外GT应该腾讯已经不维护了,所有有些功能不一定还能用。
优点:
1、在客户端就能展示性能数据,不需要连接电脑: 只有客户端集成了DoraemonKit或者腾讯GT,后续测试可以在手机上操作就可以了。
缺点:
1、需要在代码中额外配置,有侵入性: 需要研发配合在代码工程中配置第三方库对项目代码有侵入性,还有就是需要在正式包不集成这种性能采集工具,都需要额外的功能开发。
2、无法保存为数据曲线图 在出性能测试报告的时候,我们需要在测试周期内生成数据曲线图,通过数据曲线图的变化来描述性能的变化。
外置脚本
Android可以使用adb命令采集,iOS可以使用tidevice采集数据。
优点:
1、对代码无侵入
2、实时展示数据
缺点:
1、需要有一定的学习成本和配置成本
工具使用
这里主要解决iOS16的性能测试问题,主要思路还是使用外置脚本来采集并且能实时展示数据。
在测试学习论坛找到了一个开源工具可以满足解决iOS16的性能测试问题的需求,所以不一定必须自己去开发一个工具,网上有大把的工具可以使用,只要配置简单和数据置信就可以开箱即用。
前置依赖:
1、python3环境
代码语言:javascript复制brew install python3
2、Android需要安装adb工具
代码语言:javascript复制brew install --cask android-platform-tools
3、iOS需要安装tidevice工具
代码语言:javascript复制pip3 install -U tidevice
4、iOS需要安装Xcode工具在AppSotre下载
启动项目后,把手机查到电脑上就可以进行了性能测试了,经过实操可以支持iOS16的性能数据采集,数据指标和Xcode较为接近。
5、执行启动命令: python3 -m solox
首页展示数据如下:
可以实时展示数据,并且可以保存为数据报告。
目前双端支持: CPU、Memory、FPS等基础性能指标采集,简单业务场景是足够满足了。
python代码中采集Android端性能指标
代码语言:javascript复制from solox.public.apm import APM
import time
apm = APM(pkgName='com.xxx.xxx' ,deviceId='R5CR10DS1BH' ,platform='Android')
# apm = APM(pkgName='com.bilibili.app.in', platform='iOS') only supports one device
while True:
cpu = apm.collectCpu() # %
memory = apm.collectMemory() # MB
flow = apm.collectFlow() # KB
fps = apm.collectFps() # HZ
battery = apm.collectBattery() # level:% temperature:°C
time.sleep(5)
python代码中采集iOS端性能指标
代码语言:javascript复制from solox.public.apm import APM
import time
apm = APM(pkgName='com.xxx.xxx' ,deviceId='00008030-000E4C903600802E' ,platform='iOS')
while True:
cpu = apm.collectCpu() # %
memory = apm.collectMemory() # MB
flow = apm.collectFlow() # KB
fps = apm.collectFps() # HZ
battery = apm.collectBattery() # level:% temperature:°C
time.sleep(5)
结语
本文就介绍了iOS16进行性能数据采集的方法,底层还是使用tidevice采集性能指标,前端可以通过html自动生成报表展示。