一、前言

移动分发市场竞争已进入炽热化,已不再是当年野蛮生长阶段。各大分发市场都在走精细化与差异化路线。其中,省流量更新(增量更新)成为提升用户体验,增加用户留驻粘性的一项重要指标。所谓增量更新是指app可以通过增量apk的方式进行更新,而不用每次都下载应用全量apk包,该技术可以大大提升app升级效率,提升用户体验。

基于以上的背景和考量,应用宝测试团队,进行了增量更新监控专项,监控自己的增量更新能力。下面撰文,简述流程与技术栈,以飨读者。

省流量更新在本文中按照业界术语统称为——“增量更新”。

二、增量更新方案

1、增量更新方案总体设计

该增量更新监控,旨在监控实际热门app的增量更新指标(包括是否有增量更新,更新包大小,更新下载速度等),同时监控增量更新下载阶段的CPU,内存是否有异动。

根据市场表现,在PC开发机上,从应用宝市场,批量自动获取top100(最活跃下载app)作为待测app。然后100个app循环,依次推送并安装到指定测试的安卓手机至上,并使用UI自动化技术作为按键控制和app页面元素监控,成功获取是否增量更新以及增量更新大小和相关合成/下载速度等指标。与此同时,测试机端上同步开启CPU,内存等多维度监控手段,并存储到本地sd卡中,更全面衡量监控期间应用宝的增量更新相关指标。测试完毕,将本地sd卡存储的相关指标数据,推送回PC端开发机,结合自动脚本实现结果分析与处理,最终结果讲入数据库存储,并提供WEB端展示相关结果。监控流程自动实现。

下文是增量更新监控方案图:

2、本文主线

接下来,将以单元方式展开主线叙述。包括——UI监控(UIAutomator端上监控)、CPU监控、内存监控、数据分析处理与结果展示。

主要涉及:

(1)UI监控:java,UIAutomator;

(2)CPU,内存监控: 安卓底层数据获取,java;

(3)数据分析处理与结果展示:python,numpy,Django框架。

三、UI监控

我们在应用宝上批量获取典型热门top100 app作为待测对象。然后在测试机上进行增量更新监控。

先来确定下UI监控框架。端上UI自动化框架较多,如Appium、Robotium等,本次工程我们我们采用UIAutomator。UIAutomator是为数不多的安卓官方支持的自动化框架之一。其API简明而高效,被广大测试同学所钟爱。尤其UIAutomator非常适合App间协作所需的跨进程测试,本专项正是此场景。

UI监控部分使用Android Studio和UIAutomator开发,基于篇幅限制,作者默认读者已有对工具和框架已有了解,新人请参见TMQ已有介绍Android Studio和UIAutomator使用的文章,本文不再复述。

1、UIAutomator精度问题

UIAutomator扫描精度默认是1000ms,而增量更新对时间精度要求严格,希望达到百ms级别。所以,需要通过反射更改底层扫描间隔,即WaitMixin类中的DEFAULT_POLL_INTERVAL,其被定义为 private static final long DEFAULT_POLL_INTERVAL = 1000; 经笔者实践,在本项目场景中,DEFAULT_POLL_INTERVAL为200是其精确上限,故而采用200ms作为UIAutomator扫描间隔精度。

反射机制部分核心代码:

2、UI操作举例

该专项中UI操作主要分为几类:

(1)模拟按键

主要是应用市场调起后,模拟人类按键,使得进行相关测试操作。如进入应用市场后,根据resource-id, 来点击“管理”按钮,下图是操作实例。下图模拟点击”管理”。

核心代码如下所示:

(2)获取页面元素的值

我们可以通过resouce-id,来获取页面元素的值。如图所示,在应用宝中,可以看到测试手机自带的豌豆荚软件是旧版本的,且在应用宝市场是存在增量更新的。我们可以通过获取resouce-id的value来判断是否有增量更新以及增量更新包的大小。

如下是核心代码实现,仅供参考:

(3)状态检测

上图步骤中,点击”省流量更新”,即可进入增量更新下载增量包阶段。检测进度条尾端的状态栏,进度条满且状态值为100%更新下载结束。这一段时间,是时间的增量更新时间,之后按钮会变为“合成中”。由于100%出现的时间极其的短暂,所以,终止态采用“合成中”出现时间作为终止态。

代码片段示意:

上文相关操作,最后将待测app在分发市场上是否有增量更新,增量大小,更新 时间,记录在SDCARD并推送到PC端聚合汇总。

四、内存监控

增量更新期间,我们会关注应用市场的内存增长情况,以期更好更全面评价性能指标。所以,UI监控同时,我们还在测试机上进行了内存监控和CPU监控,监控增量更新下载期间是否有异常强情况。

由于安卓内核是剪裁的linux基本核。所以,安卓内存底层数据规律和linux是一致的。笔者研究了其内存机制,并找到了一种合适的监控方法。先说操作,再讲原理。

Adb shell登录安卓测试机:

PS应用名,得到pid(进程ID)。

红色方格为进程ID。

cat/porc/PID/status可以得到详细的内存情况。如下图所示:

各个字段的含义:

VmPeak:表示进程所占用最大虚拟内存大小

VmSize:表示进程当前虚拟内存大小

VmLck:表示被锁定的内存大小

VmHWM:表示进程所占用物理内存的峰值

VmRSS:表示进程当前占用物理内存的大小(与procrank中的RSS)

VmData:表示进程数据段的大小

VmStk:表示进程堆栈段的大小

VmExe:表示进程代码的大小

VmLib:表示进程所使用共享库的大小

VmPTE:表示进程页表项的大小

在本专项中,VmRSS字段即为我们所需要的内存大小。通过java实现该脚本,并集成在UIAutomator工程之中,按时间间隔调用即可实现按间隔调用。所获取数据记录到测试手机SDCARD之中,监控测试结束推送到PC端聚合。当然,也可以top来找内存信息,不过其精度较差并且刷新有滞后性,所以,建议以本文的方式来获取进程的内存消耗情况较好。

五、CPU监控

同4,基于安卓出自于linux剪裁的先天条件,我们依然可以从linux底层找CPU的监控规律。当然,我们也可以用top来测试手机上看cpu使用情况。

不过,我们还是希望能更专业一些,去从底层数据,更精准的衡量CPU规律。

/proc///stat, 包含了所有CPU的相关详情信息。

该文件中的所有值都是从系统启动开始累计到当前时刻。CPU不是一个瞬时态,而是一个过程态的体现,这一点和内存不同,大家要清楚明白。CPU的时间计数单位是jiffies,为Linux核心变数(unsigned long),它被用来记录系统自开机以来,已经过了多少tick。每发生一次timer interrupt,Jiffies变数会被加一。我们利用process jiffies的消耗,来计算CPU值。即Delta T时间段内消耗的平均jiffies,即为该时间范围内的CPU值的大小。下图是获取某一时刻的CPU详情。

我们所需要的process jiffies,具体是/proc//stat文件的第14-17 列。14-17列分别是utime, stime, cutime, cstime。cutime/cstime分别是该进程spawn的子进程在用户态和内核态消耗jiffies。

process jiffies = utime + stime + cutime + cstime

注意stat中的jiffies是一个绝对累计值,所以要取两个时间点,算Delta T中消耗的jiffies。(cpu value)= ((current process jiffies) - (last process jiffies) )*100%/(Delta T )。

综上所述,我们在T1,T2时刻分别/proc///stat,然后提取出process jiffies并与|T1 -T2|做商,即可获取该时间段内的CPU使用情况。本专项中,采用5S的时间间隔,时间太短会影响CPU的真实值,因为抖动毛刺的缘故。

六、数据分析处理与结果展示

应用宝增量更新监控做完之后,我们利用python科学计算库numpy处理下文件。总共100个app,计得100份文件结果,对结果进行清洗和过滤(去异常和脏数据),之后得到详情数据和最总指标数据,并将结果入库。

得到mysql中的结果后,为了直观展示与管理,我们将统计数据以直观的形式WEB展现出来。WEB采用Django框架。

最后得到我们需要的结果。结果如下所示:

七、总结

本文以应用宝增量更新监控为例,向广大读者提供几点借鉴。

1、UIAutomator框架的监控使用方法;

2、安卓CPU和内存的监控方法。

八、思考

本文除了介绍andorid的UI监控,还介绍了内存,cpu管理原理与监控方法。引申一下,如果要做android的IO监控和网络监控,应该怎么做呢?

关注微信公众号腾讯移动品质中心TMQ,获取更多测试干货!

【腾讯TMQ】APP省流量更新监控最佳实践相关推荐

  1. 监控最佳实践--redis及业务接口

    简介:监控最佳实践--redis及业务接口 1. 背景 1.1 问题 2020-12-04,客户侧redis集群版监控DB0 CPU突增至100%,导致数据库无法正常服务,经排查客户侧业务上存在2M左 ...

  2. 基于ITIL的SCOM监控最佳实践

    1.  按照系统类别进行监控 很多朋友在使用SCOM进行监控的时候,往往只是导入管理包,推送代理,并不会思考很多,那么在这种情况下,SCOM在进行监控的时候都是基于缺省的类对象进行监控,比如说Wind ...

  3. 【腾讯TMQ】TTS评测--方案介绍和实践分享

    导读 语音合成(Text To Speech,TTS)技术将文本转化为声音,目前广泛应用于语音助手.智能音箱.地图导航等场景.TTS的实现涉及到语言学.语音学的诸多复杂知识,因合成技术的区别,不同的T ...

  4. 百度糯米O2O产品质量保证的自动化与端监控最佳实践

    声明:本文为CSDN原创投稿文章,未经许可,禁止任何形式的转载. 作者:孙健,百度搜索公司-高级测试开发工程师,关注于移动测试开发领域. 责编:钱曙光,关注架构和算法领域,寻求报道或者投稿请发邮件qi ...

  5. html5 app list,让web app更快的HTML5最佳实践

    简介 本文重点关注如何充分利用HTML5和CSS让web app运行更加流畅. Tip 1: 使用web storage代替cookie cookie最大的缺陷是在每一次HTTP请求中都会携带所有符合 ...

  6. CDN 服务质量监控最佳实践

    作者:黄小龙,腾讯云云监控高级工程师 前言 什么是 CDN? CDN 全称 Content Delivery Network,即内容分发网络,它能够有效的避开互联网上有可能影响传输速度和稳定性的因素, ...

  7. EDAS 流量入口网关最佳实践

    作者:澄潭 云原生网关介绍 MSE 云原生网关是阿里云提供的下一代网关解决方案,完全兼容 Kubernetes Ingress 标准 API,将流量网关.微服务网关和安全网关三合一,解决了多层网关架构 ...

  8. 【Flink 监控系列】Flink on yarn 任务实时监控最佳实践(Prometheus + Grafana)打造企业级监控方案

    我们都知道 Flink 任务是一个 7*24 小时不停运行的任务,所以对于任务的实时监控就显得尤为重要,因为任务运行的状态对于我们来说是一个黑盒,比如任务是否挂掉,是否存在反压,使用的内存,CPU 等 ...

  9. 【腾讯TMQ】移动APP测试用例设计的关注点

    [腾讯TMQ]移动APP测试用例设计的关注点 在我们的测试工作中,对于某个APP的测试其实有很多东西都是类似的可以抽象出来的,这里june总结一下大部分APP测试的时候都要考虑到的方面.如果漏下了其他 ...

最新文章

  1. 美观实用!Star 过万,用 Python 做交互式图形的这款工具火了!
  2. 关于英伟达数字人文章的致歉和说明
  3. 昆仑网(D×××)去中心化虚拟互联网基础功能图片式介绍,请全屏看。
  4. Java中的正则表达式 - Java Regex示例
  5. 牛顿法与拟牛顿法学习笔记
  6. Windows学习总结(8)——DOS窗口查看历史执行过的命令的三种方式
  7. class.sitemap.php
  8. 4图纸 rust_安诺伊模具丨机加工图纸有英语看不懂?不怕!史上最全翻译都在这...
  9. 《完全写作指南》随笔
  10. php通讯hpsocket,HP-Socket 远程通信 服务端 客户端 源码
  11. vue3 - composition api
  12. Katana:1 PGP Workthrought
  13. kubectl config 命令
  14. 他把菜品变成远销省外的零食,经过口口相传,月卖70万
  15. 无主之地3重型武器节奏评分榜(9.25) 枪械名 红字效果 元素属性 清图评分 Boss战评分 泛用性评分 特殊性评分 最终评级 掉落点 掉率 图片 瘟疫传播
  16. XILINX DDR3 VIVADO(二)写模块
  17. Davinci的异构多核间通信基础组件SysLink 2.0
  18. 基于色彩恒常( color constancy)特性的Frankle-McCann Retinex图像增强
  19. 苹果侧边滑动返回_iOS系统右滑返回手势问题及解决方案
  20. 计算机能够快速准确,计算机操作练习题

热门文章

  1. deepin20.6安装wine7.0
  2. 敏捷项目管理21天学习计划--精益画布
  3. 暴风魔镜SDK:MojingSDK For Unity V1.3.5112 (R).zip
  4. OpenGL环境搭建:Win7 VS2013X64 +freeglut2.8.1+glew1.7.0+gltools
  5. 按键精灵MsgBox信息换行方法
  6. Mirai qq机器人 c++版sdk(MiraiCP)
  7. 2022材料员-通用基础(材料员)考试题及模拟考试
  8. 软件测评师--第18小时 白盒测试
  9. S3C6410中断分类
  10. 跨境电商注册义乌个体户结汇怎么开户