iOS 测试 实时可视化 iOS 性能数据 tidevice+pyiosdevice+mysql+grafana

阿三 · 2021年09月06日 · 最后由 tangoliver 回复于 2023年01月31日 · 13456 次阅读

目的

电脑连接 iOS 设备,运行脚本能实时看到测试应用的性能数据情况。

基本思路

1.每秒获取 iOS 应用性能数据
2.把性能数据存储到数据库 mysql(实时)
3.用 grafana 可视化展示性能数据(实时)

大致实现步骤

1.获取 iOS 应用性能数据这里我选择用(感谢这 2 个项目的作者🙏)
tidevice 获取:CPU 和内存
tidevice 项目地址: https://github.com/alibaba/taobao-iphone-device

py-ios-device 获取:GPU 和 FPS
py-ios-device 项目地址:https://github.com/YueChen-C/py-ios-device

2.基于这 2 个项目,我修改成,运行一个脚本,获取以上性能数据,并实时存储到 mysql(我用 docker 搭建,可网上查找)
这 2 个项目都是 py 语言, py 我不熟,即学即用忘的快那种,所以脚本凑合看(获取性能数据准确性我也没处理,这里主要介绍思路)
完整脚本地址:https://github.com/jlintxia/iOStest
运行文件位置:py-ios-device-main--test--test4.py

数据库每张表都要有时间字段(注意类型),grafana 才能识别成图表,

注意数据库的时区要跟 grafana 默认一致,改成东八区。

3.grafana(我用 docker 搭建,可网上查找)版本我用 V6.7.4,不要用最新版本,因为最新版本,图表刷新不支持每 1 秒刷新了

grafana 搭建好,添加 mysql 数据源

添加自定义图表,编辑自定义 mysql 查询语句:添加 jank 数据例子

其他性能数据添加同理。
设置图表刷新间隔 1s, 默认是 5s,自己添加修改,保存

录屏

这样就可以运行脚本,实时在平台看到性能数据,数据一直存储在数据库,方便回看/竞品对比

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
最佳回复

哈哈,同理可以搞个 Android😂

共收到 42 条回复 时间 点赞

感谢分享。还是希望贴下源码参考参考。哈哈哈

重来看雨 回复

可以,等下我补上去😂

IOS =》iOS

目前也在规划这块工具,感谢楼主分享~

挺好,perfdog 付费了,这个也可以顶上。如果能附上完整的源代码,整个方案就更易用了。

DB 用 InfluxDB 应该效率会更高点吧

陈恒捷 回复

嗯,看了付费价格。才决定做这个😂 也补上完整源代码地址

wuming 回复

原本考虑 InfluxDB,但是看 mysql 效果不错,达到预期,就没换 InfluxDB😂 你可以对比下

我们也打算做这个,起源也是 perfdog 要收费了,哈哈

谢谢楼主提供思路

11楼 已删除

哈哈,同理可以搞个 Android😂

大佬好强啊

window 连不上 mac 中 docker 的 mysql 是怎么回事呢

阿三 #15 · 2021年09月10日 Author
Time 回复

猜测你未开启数据库远程访问,建议找完整的 docker 搭建 mysql 资料

阿三 #16 · 2021年09月10日 Author
剪烛 回复

没办法,我们穷,用不起付费的😂

阿三 回复

解决了,好像是 mac 本身有个 mysql 服务可能有点问题,占用了 3306,我把 docker 换成了 33066 无法连接,现在把有问题的 mysql 干掉了,换回 3306 端口就行了😂

19楼 已删除

主要是 cpu,mem,fps,gpu 这四个数据是吗。对于开发同学来说,有什么作用,能解决哪种问题,这个希望也表述下

我弄了下自己创下数据库和表就行,win 可获取到数据,mac 上需要改 cpu/memory 的获取数据代码

22楼 已删除

提供了一个很棒的思路😀

挺不错的,CPU,内存这些资源是监控的对应 APP 的,还是整个手机的使用资源?

大佬运行报错 TypeError: init() got an unexpected keyword argument 'perfs'是为啥

大佬请问下数据表中 time 字段的数据从哪来,test4.py 运行代码中没看见插入 time 的值

Time 回复

大佬 mac 的需要修改的获取数据的代码可以具体下吗

jerryking 回复

你看下获取的内容第一句是不是字典的键值对显示和其他的不一样,有时他会获取到第一个是一串连接信息,代码处理掉第一行就行,我后续没遇到了,这块就没处理了

jerryking 回复

time 值需要自己设计数据库字段,会根据写入时间自动生成时间

Time 回复

我这边看打印的数据只有 fps 和 gpu 的

jerryking 回复

tidevice 这个需要启动 https://testerhome.com/topics/27758

32楼 已删除
Time 回复

可以了,没有启动这个,谢谢🙏

Time 回复

请问一下,这个错误有遇到过吗,开始数据是正常的
pymysql.err.DataError: (1265, "Data truncated for column 'sys_cpu' at row 1")

照着你的思路做了一些动态建表和建 grafana 面板的脚本,可以发 github 吗

阿三 #37 · 2021年10月08日 Author
胖虎 回复

可以😃

jerryking 回复

你好,我的也没有 cpu 和 mem 数据,问下你 tidevice 是怎么启动啊,是需要装 webdriveagent 吗

你这块 gpu 数据是怎么获取,发现最新的 tidevice 获取不到数据

阿三 #41 · 2021年12月08日 Author
少女 回复

py-ios-device 获取:GPU

cpu {'timestamp': 1657282966612, 'pid': 87211, 'value': 200.91855056704622, 'sys_value': 298.95241550901926, 'count': 6}

use_cpu 和 sys_cpu 分别对应的是 value 和 sys_value 吗

43楼 已删除
44楼 已删除

我部署的 grafana 跟 MySQL 连接咋老是报 “dial tcp 127.0.0.1:33306: connect: connection refused”,求大神指导😭

阿三 #46 · 2022年08月23日 Author

嗯,简单实现

阿三 #47 · 2022年08月23日 Author
yi122144453 回复

你看是不是不数据库端口问题

阿三 实时可视化 Android 性能数据 (记录) 中提及了此贴 01月30日 10:07

好东西,学习下

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册