推送SDK功耗测试

前言:

前段时间有产品提到,业务方在使用我们push SDK的时候,流量和电量的消耗非常大,想看下是什么原因导致的。背景就是这样。那么测试推送类的SDK功耗情况,要注意哪些重要的点呢?下面就从测试前的准备、测试过程以及测试结果的分析,来讲述下整个过程的测试要点。

A、B、C、D排除法

因为PUSH SDK里面不仅包括我们自家的SDK:A,同时也携带了B、C、D等第三方的SDK。所以测试前期,就要设计好,把自己SDK与其他几家的第三方SDK分开。这样在测试结束后,我们就可以分别得到各自的一个功耗消耗的情况,这样就可以找到导致功耗消耗如此之大的罪魁祸首了。

哪些操作会产生功耗

我们使用demo来测试SDK时,打开demo后,会产生功耗的操作大概有以下三点:

1. SDK与PUSH服务器每隔几分钟,会有一次维持心跳的操作(确认SDK与服务端的链接)

2. SDK产生数据后,会实时上报给qdas

3. PUSH服务器推送消息给SDK时

如何获取SDK所产生的功耗

这里我以获取流量来举例(电量可以使用adb命令来直接获取到,相对简单一些)

1. 获取应用的进程ID(procID)

2. 通过进程ID获取UID

3. 通过UID获取手机目录下,对应应用的上行和下行流量消耗情况

脚本实现

如下图,是通过UID来获取上行流量(tcp_snd)和下行流量(tcp_rcv)的部分代码。我们只需要打开应用后,通过adb命令获取进程ID,然后通过进程ID获取UID,把UID以参数的方式传到这个方法中,就可以得到上下行流量。

测试重点:

1. 每隔几分钟,SDK与服务器维持心跳时,流量消耗的情况

2. 后台推送PUSH消息时,SDK上行流量和下行流量的变化情况以及二者之间的关系

3. 上行流量(tcp_rcv)+下行流量(tcp_snd)=应用消耗的总流量,最后对比相同条件下,各家SDK消耗流量的情况

4. 获取到的流量值是已字节为单位,大家要记得转换成KB或者M

测试时遇到的问题:

1. 测试过程中,会提示无法访问设备的UID以及下面的tcp_rcv和tcp_snd目录

问题分析:有些厂商隐藏或者禁止用户访问此目录,所以唯一的办法只能是通过其他手机来进行测 试。我在测试过程中,使用的是360手机,这款手机是允许我们来检测应用的流量使用情况的。

如下图:就是某款手机厂商,不允许用户访问之后给的提示信息

2. 维持心跳的过程,消耗的流量非常少,大概几个字节的大小,要注意否则容易忽略这里的消耗(如下图,下面的是维持心跳后的上下行流量,相较于上一次流量统计,只增加了8个字节。可见这里的消耗是很少的)

3. 后台推送PUSH消息时,出现SDK消耗的上行流量>下行流量。正常来讲,后台推送消息,应该是SDK去下载然后查看,没有什么请求操作,理应是下行流量大于上行流量。但是确确实实出现了上行流量大于下行流量的情况。

问题分析:最后多方确认后发现,SDK产生的数据 会实时上报给qdas,这样产生的一部分请求数据会同步到上行流量中。导致上述问题的出现。所以实际上,PUSH SDK在每次接收消息时,消耗的流量是要略少于当前所测数据。所以大家在平时测试此类SDK时,一定要注意是否有其他的操作会影响到SDK本身的流量消耗。

4. 杀掉进程或者重新装包后,启动应用,检测到的启动流量消耗特别大,不正常。后来经过排查,发现同一个应用,无论是杀进程还是重新装包,再次启动时,流量还是存放到之前的UID下。所以这时监控到的流量就包含了历史数据量。

解决办法:有两个方案:1. 重启机器后重新装包,这时之前的UID就不见了,打开应用后会重新生成UID,不包含任何历史数据。 2. 在代码中加上去除历史数据的方法,每次监控时保存历史数据,然后最后再去除历史数据即可。

小灶时间

问:平时在聊微信的时候,当切换到后台时,别人给你发送消息,这个消息会在手机顶部弹出来,大家知道顶部弹出的消息是由谁来负责的吗~

IOS:当微信切到后台后,微信的服务器会把收到的消息先推送给APNS(苹果自己的服务器),然后再由APNS把消息以弹窗的形式在手机顶部弹出。

Android:当微信切到后台后,微信的服务器会调用微信的客户端,然后微信的客户端再调用Android系统的API,把消息以弹窗的形式在手机顶部弹出。

以上我在测试推送相关SDK的时候,总结的一些知识点。大家有什么想法赶快提出来吧~

Qtest是360旗下的专业测试团队!

是WEB平台部测试技术平台化、效率化的先锋力量!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180725B1JP2B00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券