基于Benchmark的性能测试量化指标方案是一种用于评估和量化系统性能的方法。通过使用Benchmark测试工具,该方案旨在提供可靠的性能数据,并使用具体的指标来衡量系统在各个方面的表现。
Part 01 背景
随着App业务不断增长和功能的迭代,代码量快速增加,导致应用结构复杂度提高。同时,在App开发过程中,与竞争对手的App进行性能比较也是必要的。为了避免代码增长和功能迭代带来的性能下降,我们需要一套技术方案来监控App版本的性能,以指导开发人员及时进行代码重构。
Part 02 方案说明
Benchmark,即基准测试,是检查和监控应用性能的一种方式。通过对每个移动App版本的迭代运行基准测试,可以帮助分析和调试性能问题,并确保迭代的更改不会引起性能下降。
以下是一些常见的移动App的benchmark方法和工具:
1.Startup Time Benchmark:评估应用程序的启动时间,即从用户点击应用图标到应用程序完全加载并可交互的时间。可以使用各种工具和方法来测量启动时间,如使用应用性能监测工具或手动计时。
2.Responsiveness Benchmark:评估应用程序对用户操作的响应速度,包括用户界面的流畅度和操作的延迟。可以使用性能监测工具记录用户操作和应用程序响应时间,或者进行用户体验测试来评估应用的响应性能。
3.Memory Usage Benchmark:评估应用程序在运行过程中使用的内存量。可以使用内存分析工具来监测应用程序的内存使用情况,并进行比较和分析。
4.Battery Consumption Benchmark:评估应用程序对设备电池的消耗情况。可以使用电池消耗监测工具来测量应用程序在不同使用情景下的电池消耗量,并进行比较和分析。
5.Network Performance Benchmark:评估应用程序在使用网络功能时的性能和速度。可以使用网络性能监测工具来模拟不同网络条件下的应用性能,并进行测试和比较。
针对Startup Time Benchmark和Responsiveness Benchmark,Google提供了Macrobenchmark库,该库主要用于评估Android App整体性能的基准测试。其旨在模拟真实世界的使用情景,通过测试用例以涵盖各种应用使用过程中交互操作,以综合评估应用的性能和响应能力。
2.1 Macrobenchmark
2.1.1 设置Macrobenchmark
1. 打开应用Application工程,在 Android Studio 的 Project 面板中右键点击项目或模块,然后依次点击 New > Module。
2. 从Templates窗格中选择 Benchmark。
3. 自定义目标应用(要进行基准测试的应用),以及新的Macrobenchmark模块的软件包和模块名称。
4. 点击Finish,从而创建Macrobenchmark Module。
2.1.2 创建Macrobenchmark类
在Macrobenchmark,我们根据业务自身情况,创建所需的性能指标Benchmark测试用例。测试用例可以基于Macrobenchmark 库中的`MacrobenchmarkRule` JUnit4规则所含的API实现。
比如我们现在需要对App应用启动时间进行监控。则可以在Macrobenchmark Module编写一个测试用例类,在测试用例类中编写测试用例方案,如测量5次打开应用时间。
创建startup测试用例,该用例基于MacrobenchmarkRule.measureRepated。
其中各参数:
- packageName:App的包名;
- metrics:测量度量。此处我们选择 StartupTimeMetric,标识测量启动时长;
- iterations:重复次数。表示该项用例的测试次数,可以通过多次测量取均值的方式,避免单次测量的偏差影响;
- setupBlock:用例前置操作。;
- 最后的 {} :用例内容。此处我们执行 startActivityAndWait,表示启动App并等待启动完成,App首帧显示。
2.1.3 运行基准
在Android Studio中运行测试,以衡量应用在设备上的性能。可以像使用测试类或方法旁边的边线操作运行任何其他 `@Test` 一样运行基准,如下图所示。
也可以通过`gradle`命令,从命令行运行Gradle模块中的所有基准:
2.1.4 基准结果
基准运行成功后,指标会直接显示在Android Studio中,还会以JSON文件形式输出以供持续集成环境使用。
每次衡量的迭代过程均会捕获单独的系统跟踪文件。点击Test Results窗格中的其中一个链接,可以打开这些结果跟踪文件,如下图所示。即平均启动时长为748.1ms。
跟踪文件加载完成后,Android Studio会提示您选择要分析的进程。系统会预先填充目标应用进程:
跟踪文件加载完成后,Studio将在CPU性能剖析器工具中显示结果:
Part 03 应用实例
在实验工程中,在Application.onCreate中增加了200ms睡眠。
运行实验工程,构建App,运行App,运行Macrobenchmark。在CPU性能剖析器工具中可以看到主线程在app.onCreate方法执行时耗时达223.12ms。
通过分析CPU性能剖析器工具 的示图,可以判断app.onCreate 时,主线程存在约200ms异常时延。再阅读相关代码,可以查出该异常部分的睡眠逻辑。
将该异常睡眠逻辑移除,从新运行实验工程,构建App,运行App,运行Macrobenchmark。
在CPU性能CPU性能剖析器工具中可以看到主线程在app.onCreate方法耗时约为22.01ms,时延正常,方法执行过程中只执行了相关调用方法,说明问题得到了修复。
通过以上案例,我们可以看出通过Macrobenchmark + CPU性能剖析器工具, 我们可以对应用特定场景进行时延分析,并对新增时延进行有效归因,从而能针对性的进行优化处理。
👉参考文献
[1] 基准化分析:https://developer.android.com/topic/performance/benchmarking/benchmarking-overview?hl=zh-cn.
[2] 使用Macrobenchmark 测量用户启动好卡顿:https://www.youtube.com/watch?v=0adLO2VRJtc.