构建性能保障体系之自动化性能测试
本系列文章将围绕如何构建客户端性能保障体系,分别从开发周期的各个阶段来讨论构建完整的性能保障体系;
- 开发阶段
静态分析和代码风格一致性
模板代码
执行单测
- 测试阶段
自动化性能测试
- 线上运行阶段
APM 性能监控
性能测试是指收集每次版本迭代的性能差异,暴露进程启动和运行时方法执行快慢、帧率等和体验息息相关的指标。有些团队会定义性能基线,每次回归测试时由人工执行一些主要用例。
对于性能测试而言,持续的性能测试是防止性能劣化非常有效的手段,而如何保证持续性,关键就是如何实现人工的替换,而尽可能采用自动化的执行方式;
本文将从实操的角度出发,概述如何实现完备的 iOS 自动化性能测试;
Instruments
1 2 3 4 | # 命令行启动 TimeProfile 并导出分析结果 xcrun xctrace record --template TimeProfile --launch --output . /output .trace longbridge-ios-app.app # 将分析结果导出为 xml 格式 xcrun xctrace export --input ${trace} --toc --output ${exportXMLName} |
要知道什么是 instruments Server,可以先研究一下 Troy Bowman 在 2018 年的分享发现 server 的秘密

简单讲 Server 是运行在 iOS 上的特殊进程,可以和电脑端进行通信从而发送性能数据,这里作者开源了如何构建消息结构和 Server 进行通信的开源实现 https://github.com/troybowman/ios_instruments_client。
Instruments 统计方法耗时有其无可比拟的优势,无侵入性且能采集到信息非常丰富,但是由于其统计方法耗时是基于抓取栈帧的方式,无法统计方法调用次数,以及每次所耗时间,这对我们做历史对比时有非常大的不便。
运行时统计方法耗时
objc_msgSend
方法,所以理论上通过Hook objc_msgSend
方法 就可以统计所有方法的调用及耗时,而且很容易获取到 Class 、SEL 等符号信
iOS自动化测试



定位到耗时方法后,再通过 Git 提交记录来获取到修改人,从而通知到相关开发,甚至自动的创建 jira 任务跟踪修复情况。
而对于其他性能数据,比如 FPS、CPU 占用等,如何获取可以参考滴滴的 DoraemonKit 的相关实现,获取到之后通过 peertalk 实时推手到电脑端做进一步的处理,之所以推送到电脑端来处理是为了尽可能减少注入的统计代码对原 APP 整体性能的影响。
另外还需要一些必要的基础设施,例如对性能数据的统计分析、展示页面等,推荐使用 Nodejs 也是为了能够更方便的构建这些基础设施,毕竟 Full-Stack JavaScript 的学习成本还是比较低的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库