安卓性能自动化测试平台思路设计与实践

一、安卓性能测试的难点

  • 安卓客户端产品可能会遇到用户反馈,用了一段时间后手机发烫发热、内存不够用了,这可能是客户端性能没有优化导致的用户体验下降。
  • 客户端性能测试,常见的做法一般是通过各种方法获取性能参数,包括cpu、内存、电量、流量等,然后再通过各种测试工具结合性能数据,对代码中耗时较久的方法进行性能优化。这个过程通常会比较费时。
  • 我们考虑如何从使用产品的角度出发,直接定位到性能剧变的点,然后再针对该点进行性能优化,这样的话能够明显提高客户端性能优化的效率。

因此,我们尝试将UI自动化测试与性能测试的结合进行了探索和实践,设计了针对安卓的性能自动化测试平台。平台以文漫的几个产品为例,进行了性能自动化测试的初步实践。

二、性能测试结合UI自动化

UI自动化测试:一大特点是UI测试,也就是模拟用户的真实操作,另一大特点就是自动化,自动化的过程完全可以拿到用户在哪一秒做了什么操作。将性能测试与UI自动化测试结合起来,我们能够从用户使用产品的角度出发,寻找性能剧变的点。常用的安卓UI自动化框架有很多,我们选择使用较稳定的Appium进行UI自动化测试。

Battery Historian:性能数据的采集也是关键步骤,Battery Historian是Google提供的通过可视化图形界面展示电量等各种性能数据的工具,我们可以通过adb bugreport命令拿到性能文档,然后通过Battery Historian进行性能数据的图形化展示。

因而,我们设计的针对安卓的性能自动化测试平台,就是将性能测试(Battery Historian)与UI自动化测试(Appium)结合起来。

三、性能自动化测试平台简介

文漫组主要是四个产品,阅读、漫画、蜗牛和lofter,我们将性能自动化测试首先应用在本组的四个产品上。由于平台第一期,我们的UI自动化用例选取了每个产品最核心的功能来测试,如阅读是阅读书籍5分钟,蜗牛阅读书籍5分钟,漫画是阅读漫画5分钟,lofter是浏览首页资讯5分钟。adb bugreport需要用真机测试才可以获得有效的性能数据,尤其是电量数据,于是我们使用adb wifi脱机执行UI自动化测试。
平台操作:点击某一个按钮开始对应的产品UI自动化测试,执行完成后点击“观看报告”,即可在下方查看Battery Historian解析出来的性能数据。
平台展示如下:
上半部分是进行UI自动化产品选择的按钮,执行完UI自动化后,可以点击观看报告,进而下半部分展示具体的性能数据。由于我们目前主要关注的是电量数据,将其他cpu等数据进行了暂时的屏蔽。


安卓性能自动化测试平台思路设计与实践_第1张图片

具体操作过程如下图所示:


UItestSmall.gif
图一:性能自动化测试平台操作

我们这里进行的场景文件的录制和性能数据的结合,可以在坐标图中展示出在哪一时刻做了什么操作,也就是下图浮层中展示的“此刻操作:xxx”,下图三中给出的是在性能剧变(电量发生下降)的点进行了查看,进行的操作可以明显看到。


安卓性能自动化测试平台思路设计与实践_第2张图片
图二:场景文件与性能数据结合的展示

安卓性能自动化测试平台思路设计与实践_第3张图片
图三:场景文件与性能数据结合的展示

Battery Historian还提供了从系统整体角度和独立的app进程角度进行的电量等性能分析,可以通过平台查看报告点击后下拉页面查看,下图四就是系统性能整体数据,而下图五则是选择网易云阅读的进程性能数据。


安卓性能自动化测试平台思路设计与实践_第4张图片
图四:系统性能整体数据

安卓性能自动化测试平台思路设计与实践_第5张图片
图五:网易云阅读的进程性能数据

四、性能自动化测试平台的基本框架

我们在服务器上搭建了两个web服务器,分别是tomcat与go服务器,因为Battery Historian是用go语言实现的服务,我们就另起了一台tomcat进行平台基本功能的开发,而核心的bugreport数据则由Battery Historian服务器解析。
如下图所示,tomcat服务器前段页面主要是进行测试请求和结果展示,而后端Servlet则处理进行环境检查、执行UI自动化脚本、生成自动化场景文件以及生成Bugreport报告。而go服务器的后端负责解析核心bugreport报告和scene场景文件,并将其进行拼接传给前端页面予以展示。


图四:性能自动化测试平台基本框架

平台实现的技术难点主要有几个:

  1. 脱机进行UI自动化测试。因为使用数据线进行充电的话,电量数据等数据并非反映真实的性能情况。我们选择adb wifi进行了真机的脱机UI自动化测试。
  2. 平台接口处理复杂终端操作。我们使用shell脚本进行,结合gradle的命令行执行UI自动化用例。
  3. Battery Historian处理场景文件。我们改造了原生的Battery Historian,对其做了再次开发,将处理场景文件的功能加了进去。

五、后续平台发展与展望

因为目前平台第一期主要做了是文漫几个产品的实践,且把UI自动化用例都进行了固定,为目前用户最主要操作的核心功能。后期在平台优化方面可做的地方有许多:UI自动化用例的选择(希望支持自定义测试用例);产品不做限制,任何产品都可以上传包并产生性能数据;性能文件的保存,前后多个性能文件的对比。

目前平台的功能比较单一有限,这是我们将性能测试和UI自动化测试结合思路的一次实践,后面希望可以通过优化平台,包括自定义测试用例、产品应用广泛化、性能数据的对比等,使性能自动化平台在性能测试中发挥更大的作用。

有其他问题、想法或者建议的话可联系我或者刘胜[email protected]

你可能感兴趣的:(安卓性能自动化测试平台思路设计与实践)