基于tidevice采集iOS性能数据

2022-06-21 16:31:30 浏览数 (1)

背景

在iOS性能专项测试会进行采集iOS性能数据,常见性能数据指标: 内存、CPU、FPS、网络、磁盘等。如果了解iOS的同学应该都了解系统生态比较封闭、提供开放接口比较少,想要通过外部采集方式拿到iOS性能数据很难。

到现在能做到跨平台,对非越狱 iOS机器进行监控数据的貌似只有腾讯一家 Perfdog,GitHub 上比较有名的关于 iOS 设备控制仓库上例如 facebook idb,libimobiledevice 等,也都没有获取性能数据相关内容。

Perfdog(腾讯WeTest部门商业化产品),https://perfdog.qq.com/, 一开始使用的PerfDog来做性能分是免费的, 但是从21年9月开始就收费了, 而且起步价3000¥/3000分钟还不便宜。个人使用仅20分钟配额, 实在不够。

Perfdog,确实非常优秀,但是腾讯对于PerfDog的技术还是比较保密的,查看了官方文档介绍,一点也没透露是如何采集iOS性能数据的。

Perfdog

另外一个方案就是使用Xcode,Xcode工具本身集成提供获取iOS性能工具instruments。

instruments工具提供了很多小工具,比如测试CPU、启动时间、内存泄漏分析,instruments工具更多是面向开发者使用的,对于测试人员如果想要好,还是有一定难度。

使用本地源码编译, 采集某个应用的CPU。

在appstore下载的app启动性能采集,会报错需求开发者签名。

但是可以看出instruments工具的一些问题:

  • 工具定位比较专业,小白比较难入手。
  • 测试应用必须源码编译出来的,否则不能启动应用。
  • 测试数据不易懂
  • 不能结合自动测试使用

tidevice的入门介绍,可以参考iOS自动化工具tidevice初探这篇文章,tidevice可以通过命令行或者python脚本方式采集iOS性能数据。本文会介绍 tidevice是如何采集iOS性能数据。

性能采集

tidevice项目地址:

代码语言:javascript复制
https://github.com/alibaba/taobao-iphone-device

安装命令:

代码语言:javascript复制
pip3 install tidevice

查看App应用名称

代码语言:javascript复制
tidevice applist

命令行方式

查看性能数据命令:

代码语言:javascript复制
tidevice perf -B tv.danmaku.bilianime(包名)

命令行启动后就一直开始采集数据,手动ctr c停止采集数据。

输出数据格式如下, 采集时间使用时间戳格式。

代码语言:javascript复制
fps {'fps': 46, 'value': 46, 'timestamp': 1655023837471}
gpu {'device': 22, 'renderer': 20, 'tiler': 22, 'value': 22, 'timestamp': 1655023837572}
cpu {'timestamp': 1655023837647, 'pid': 2734, 'value': 0.6984475878545683, 'sys_value': 83.33333333333331, 'count': 2}
memory {'pid': 2734, 'timestamp': 1655023837647, 'value': 148.61046600341797}
network {'timestamp': 1655023837613, 'downFlow': 78.1064453125, 'upFlow': 0.7294921875}

python方式

代码例子如下:

代码语言:javascript复制
import time
import tidevice
from tidevice._perf import DataType

t = tidevice.Device()
perf = tidevice.Performance(t, [DataType.CPU, DataType.MEMORY, DataType.NETWORK, DataType.FPS, DataType.PAGE, DataType.SCREENSHOT, DataType.GPU])
#  tidevice version <= 0.4.16:
#  perf = tidevice.Performance(t)

def callback(_type: tidevice.DataType, value: dict):
    print("R:", _type.value, value)


perf.start("tv.danmaku.bilianime", callback=callback)
time.sleep()
perf.stop()

输出数据格式和命令行输出一致, 在脚本中设置sleep时间为停止时间点。

小结

本文就介绍了tidevice工具的iOS性能数据采集功能,比较适合在外采测试工具不充足的情况下,使用tidevice做iOS专项测试。

但是毕竟是开源免费产品,后续是否能及时支持新iOS系统、及bug修复,就需要看作者的更新速度了。

最后tidevice性能采集这部分仅能帮助我们输出数据,下文会使用python pychart自动生成实时的性能采集报告。

0 人点赞