vlambda博客
学习文章列表

iOS性能测试实战-instruments


点击 蓝字 👆关注【 测试先锋 】,不再迷路!
一起成为互联网测试精英,前瞻测试技术~



导语iOS 性能测试入门篇,iOS 性能测试如果要做的更深入,只知道使用 instruments 或者其他的一些开源工具(如 wetest 的 perfdog )是不够的,还需要自己根据需求定制 iOS 测试工具。这里等遇到具体需求了再写。今天这篇就谈一谈我对 iOS 性能测试的理解,也是复习一下之前掌握的知识。

iOS性能测试实战-instruments    上篇回看 👉 :  

    iOS性能测试实战-instruments1/  目前 iOS 性能测试现状

讲个故事为引:一个工厂,有50条流水线,有一次老板去问一个工人,你这条流水线的成品率多少,工人说98%,老板摇了摇头,走了。后来工人问主管老板为何走了,主管说:“每条生产线都是98%,那50条流水线就是98%乘50次,基本上就是40%多,这种成品率对工厂生存都是个挑战了。”由这个故事我们可以知道,其实有的时候能争取一点就争取一点,在性能测试当中是多么的重要。目前iOS性能测试主要有两部分来优化:
a.代码层面 reivew优化
b.通过一些性能工具来帮助挖掘项目瓶颈
本文主要就性能工具的层面来阐述性能测试的一些技巧和必备知识。

iOS性能测试实战-instruments

2/  Instruments 的优势

Instruments 是 Xcode 的一个工具集,为我们提供了强大的程序性能分析及测试能力。Xcode是编译iOS项目时用的编译器,所以这里的兼容性问题是不用考虑的,而且Instruments是有持续维护和更新的官方工具。这就好像很少听说iOS项目不用Xcode编译器一样,工具端在iOS侧其实没有那么多的选择。读者也不必纠结一些其他工具,因为下面的介绍可以让你知道iOS的Instruments已经足够强大。

iOS性能测试实战-instruments

3/  Instruments 常用功能介绍

连接MAC 电脑,打开 instruments 展示如下界面:

iOS性能测试实战-instruments

对应上图的英文具体解释功能如下:

功能 具体解释
Blank 创建一个空的模板,你可以自定义的添加各种工具
Activity Monitor 可以只用这个模板,研究系统工作负载和虚拟内存大小的关系
Allocations 将Allocations和VM跟踪器加到跟踪文档中,使用该工具可以监视内存和对象的内存分配方式和情况
CocoaLayout 是一种Cocoa布局工具 ,可以应用于iOS模拟器和Cocoa桌面应用,但是不能和连接的iOS设备一起使用。观察NSLayoutConstraint对象的改变,帮助我们判断什么时间什么地点的constraint是否合理
Core Animation 将CoreAnimation加入到跟踪文档中,可以测量ios设备上每秒的CoreAnimation帧数,这可以帮助你理解内容是如何渲染到屏幕上的,(图形性能)这个模块显示程序显卡性能以及CPU使用情况。
CoreData 将CoreData数据提取、缓存缺失和存储加入到跟踪文档中,使用这个工具可以检测应用程序中数据的存储交互
Counters 收集使用时间或基于事件的抽样方法的性能监控计数器(PMC)事件。
Energy Log 耗电量监控,将Energy Diagnostics, CPU Activity, Display Brightness, Sleep/Wake, Bluetooth, WiFi, and GPS instruments加入到跟踪文档中进行检测。
File Activity 将File Activity, Reads/Writes, File Attributes, and Directory I/O instruments 加入到跟踪文档中,只用这个模板可以让你检查系统文件的使用情况,可以检查文件的打开、关闭、读和写操作,同时也可以检测文件系统本身的改变,包括权限和所有权发生的改变。
Leaks 将the Allocations and Leaks instruments加入到模板中,使用这个模板可以帮助你检测内存的泄漏。
Metal System Trace 它是是apple 2014年在ios平台上推出的高效底层的3D图形API,它通过减少驱动层的API调用CPU的消耗提高渲染效率。
Network 用链接工具分析你的程序如何使用TCP/IP和UDP/IP链接。
OpenGL ES Analysis 将OpenGL ES Analyzer and OpenGL ES Driver加入到模板中,这个模块测量分析OpenGL ES活动正确性检测以及表现问题,提供解决建议。
System Trace 系统跟踪,通过显示当前被调度线程提供综合的系统表现,显示从用户到系统的转换代码通过两个系统调用或内存操作。
System Usage 这个模板记录关于文件读写,sockets,I/O系统活动, 输入输出。
Time Profile 执行对系统的CPU上运行的进程低负载时间为基础采样。
Zombies 测量一般的内存使用,专注于检测过度释放的野指针对象,也提供对象分配统计,以及主动分配的内存地址历史。

这里常用工具主要有:Activity Monitor, Allocations,Core Animation,Leaks 在下一节当中也重点介绍下是在项目中如何使用Instruments的这几个功能发现问题的。  

4/  Instruments 实战操作举例(上)

以一个 app性能需求测试 为例,以下简称 APP 小A,介绍几个关于音视频相关的性能测试 case。

  (1)业务视频合成页面-帧速 FPS 测试

- 需求:针对 APP 小 A 编辑视频的页面帧率进行专项测试,通过提高预览时的 FPS,来提高用户制作的欲望

 - 具体使用到的工具:适用instruments 的 core animation 来测试 FPS

iOS性能测试实战-instruments

(2)具体操作

具体操作的页面:

iOS性能测试实战-instruments

可以看到,图中界面下方是有 fps 滚动的。按照这个方法测试几款机型,拿到详细的数据结果。

注意:在做性能测试的时候,要从功能测试的角度来分析。即业务侧:

问题 1:用户滑动的时候是怎么滑的?(快速刷,慢刷)

问题2:用户滑动的时候,看到的是视频,还是图?(feed加载不同内容的时候性能变化)
问题3:快速滑动的时候数据加载问题,是否有优化空间?

根据上述3个问题,再根据具体操作来逐个获得数据,最后发现与竞品的数据对比如下:

(3)测试结论与原因分析

iOS性能测试实战-instruments

下面给几个性能测试的结论样例,方便各位同学参考:

(a)竞品对比结论(样例)

快速滑动的时候,竞品帧率非常稳定的原因有如下几个:

 - 对于快速的 UIKit 有优化空间,异步的动作与主进程分开,保证主进程的性能。

 - 分页逻辑需要更加细腻,在分页数据不够时,增加缓冲条 UI,不让用户不停的向下滑

对于慢滑时帧率过高的原因分析:

慢滑的时候一直能保持高 FPS 的原因可能是因为在“持续播放视频”,视频的帧率可以保持在 60FPS 不掉,所以让 feed 的帧率也会保持在 60FPS 不掉。但是竞品的 feeds 没有播放逻辑,所以节约了这块的性能支出。展示的内容少,就算帧率低,慢滑的时候感官体验也不会太差。但是在快速滑动的时候,APP-A 就能明显感受到卡顿

(b)多机型测试详细结论(样例):

iPhone6 :

可以看到有很多低于20fps的帧率表现 这些时刻基本上都是seek,在fps为0的特殊时候,可以看到当时cpu的监控 cpu并没有跑到峰值,因此这里可能有优化的空间

iPhone7P:

iPhone7p在seek的时候数据表现较好,尤其在频繁seek,切换主题的时候可以看到帧率并没有掉的很厉害,cpu的利用率也没有到达峰值

iPhoneX:

iPhoneX机型在seek 切换主题,正常预览播放的时候fps都表现优异,没有出现掉帧,也没有出现fps低于30的情况

    至此,基于 iOS 性能测试的-FPS 帧率测试的场景就基本上测试完了,我觉得工具其实是次要的,主要还是在做性能测试的时候的思考和猜想验证比较重要。平时要多锻炼这方面的能力,才能快速帮忙定位业务问题。




往期文章推荐:


👉  

👉   

👉  

👉  

 iOS性能测试实战-instruments

iOS性能测试实战-instruments

如果您喜欢,能点个“在看”吗?您的“在看”是我最大的动力,感谢您!

测试先锋:积跬步,至千里,做踏踏实实技术人✌️