当前位置:首页 > 安卓源码 > 技术博客 >

Android开发从探索到突破:网易云音乐Android自动化性能测试实践

时间:2019-03-29 07:07 来源:互联网 作者:源码搜藏 浏览: 收藏 挑错 推荐 打印

某些平台上输出的性能监控报告,数据没有统一标准、进一步分析无法进行,自动化测试往往成为鸡肋,你是否满意? 那么,面对复杂的线上环境,如何才能完成性能相关的自动化测试?面对线下环境,又该如何模拟用户操作,制定一个面向对象的标准? 本章内容,网

某些平台上输出的性能监控报告,数据没有统一标准、进一步分析无法进行,自动化测试往往成为鸡肋,你是否满意?

那么,面对复杂的线上环境,如何才能完成性能相关的自动化测试?面对线下环境,又该如何模拟用户操作,制定一个面向对象的标准?

本章内容,网易云音乐高级Android工程师李宗骏为您解读《云音乐Android自动化性能测试实践》。

概述

本章将从卡顿监控的角度,介绍网易云音乐在性能方面的自动化测试实践。
内容涵盖三方面:

1、明确平台架构的搭建目标;
2、云音乐在卡顿监控中的实践经验;
3、从测试闭环到开发闭环中的实践经验。

云音乐的目标

提出目标前,先要了解清楚我们想处理什么样的问题,收集什么样的问题,达成什么样的目的?
反复的思考和探讨后,网易云音乐在性能自动化测试上提出了以下目标:

  • 可执行的标准:标准可量化、面向线下环境、面向用户体验;

  • 可分析的问题:保证收集的问题可被分析,能产出在代码逻辑上的优化修改;

  • 持续集成能力;

  • 向开发侧闭环:对开发过程有一定约束。

以下是云音乐的目标规划图——
Android开发从探索到突破:网易云音乐Android自动化性能测试实践

在卡顿监控中的实践

在卡顿监控中,BlockCanary是一个比较高效的分析方法,最初云音乐采用的就是这一方案,但在实践中遇到了一些问题:

  • 颗粒度较大,无法细分具体的场景,导致分析困难;

  • 无法监控非msg和多个msg耗时。
    BlockCanary的原理是它能监控主线程的Message执行耗时,同时在判断发生卡顿的同时开始采集堆栈信息。所以这决定了它的本质就是——一个场景(主线程Message耗时)+ 可分析的内容(堆栈信息)。

因此,沿着这种思路,我们可以想到监控卡顿问题,主要就是找到一些场景,然后收集场景中可分析的内容。
在这一思路的启发下,我们尝试做了一个组合的模式:
Step1:将问题按照场景进行细分,总结常见的发生卡顿的场景。
Android开发从探索到突破:网易云音乐Android自动化性能测试实践
但在执行一段时间之后发现这种思路也有一定不足: 场景过于细分,导致分体不够内聚; 很多卡顿问题的场景不是单一的,而是多个场景的组合。 以上都对问题最终的分类和定位造成一定困难。
又做了进一步改进——

Step2:让所有的检测向BlockCanary聚合。
Android开发从探索到突破:网易云音乐Android自动化性能测试实践
这种做法有两个好处:

  • 能够根据场景制定不同标准,增加有效性;

  • 通过收集关键信息,提高分析效率。
    首先,问题的输入不再限制是BlockCanary,而是我们任意定义的卡顿场景都可以触发信息收集。

另外,所有与性能相关的环境信息都会被抽象成事件,统计发生卡顿前后整个时间段内的所有发生过的性能事件和对应的时间点,比如生命周期事件,绘制事件,布局加载事件,Input、动画事件等。
通过类比可以发现,这种信息采集的方式刚好相当于systrace和traceview的结合,明确目标之后,可以参考systrace所收集的信息,进一步优化采集的策略、丰富采集的信息。

Step3:对采集信息进行分类。
目前网易云音乐采用的分类方法比较简单,即从下向上建立堆栈,找到第一个耗时卡顿总时间二分之一的业务代码,就会将其标记为问题的核心方法,然后根据核心方法归类问题,如果几个问题的核心方法一致,就将其归为一类。

从测试闭环到开发闭环

Android开发从探索到突破:网易云音乐Android自动化性能测试实践
上图可以看到,这是我们团队之前开发和测试之间的流程关系:
通过自动化的测试解析发现bug——开发消解bug——投入到下一轮测试
这种方法的缺点在于测试结果没有在团队中同步,开发过程缺乏约束。
针对以上问题,团队回顾了性能测试从最初到最后的过程,进行问题分类,得到结论如下图:
Android开发从探索到突破:网易云音乐Android自动化性能测试实践
分析出这些Top级的问题后,发现可以更进一步:除了依赖之前的BlockCanary流程发现问题,也可以直接按照所发现的问题进行统计和问题定位。
同时,Top级问题也会加入到静态代码检查中,这样在开发过程中就可以预先消解潜在的性能问题,对开发产生约束。
通过这种方式,形成了一个开发过程的新闭环,最终达到了下图的流程:
Android开发从探索到突破:网易云音乐Android自动化性能测试实践
即出现bug后提取Top问题——将Top问题一方面作为新的测试项目投入到测试当中,另一方面把它作为代码扫描输入。
这种方法就能够利用静态代码检测,增加开发过程的约束。

总结

在团队的自动化性能测试工作中,总结出以下经验:
1、要制定一个比较明确的目标:想做什么?是以线上环境为主还是测试为主?怎样采集数据?制定稳定的标准?
2、性能测试本身虽然是一个闭环,但也是可以被持续集成的,可以随着测试方法动态发生发展。这一过程中不仅要可以做到测试过程闭环,也可以做到开发环境闭环,去约束开发。

Android开发从探索到突破:网易云音乐Android自动化性能测试实践 转载http://www.codesocang.com/appboke/39732.html

技术博客阅读排行

最新文章