一款优秀的 App 发布到应用市场,会伴随着用户流量的日益增长,经受着各项指标的考验,这里与大家畅聊下 App 专项测试技术。
市场上主流的 App 开发技术主要有:
Native App:原生 App,基于操作系统开发
Web App:网页 App,基于 H5 实现,可通过浏览器访问
Hybrid App:混合型 App,结合原生和网页应用
React Native App:混合型 App,基于 JSX 来写原生界面
几种常见的 App 启动方式专业术语:
冷启动:当启动应用时,后台没有该应用的进程,这时系统会 force 一个新的进程分配给该应用
热启动:当启动应用时,后台已有该应用的进程,这时会从已有的进程来启动应用
温启动:介于冷启动和热启动之间,用户 back 退出 App,然后又启动。App 进程可能还在运行,但是 activity 需要重建,用户退出后,系统可能由于内存原因将 App 杀死,进程和 activity 都需要重启
注:以上说的启动,是通过点击 App 图标来启动,而另外一种方式是进入 App 最近使用的列表界面来启动应用,这种不应该叫启动,而是恢复。
下面我们根据几种场景,分别站在用户和技术维度进行剖析:
用户反馈 App 启动到进入 App 时间长
冷启动后,系统会 force 一个新的进程分配给它,所以先创建和初始化 Application 类,期间会有很多第三方 SDK 的初始化,再创建和初始化 MainActivity 类,一系列 view 的测量、布局、绘制,最后经过渲染显示在 App 界面上。
使用 adb 命令获取启动时间adb shell am start -W -n XXActivity
结果分析:
TotalTime:该应用所有 Activity 启动的耗时
WaitTime:系统启动应用耗时一般比 TotalTime 长,包括系统影响的耗时
用户反馈手机检测到 App 耗费流量
手机流量是指手机上网产生的流量数据,用手机打开软件或进行互联网操作时,会和服务器交换数据,手机流量就是这数据的大小。运营商替我们手机转发数据报文,数据报文的总大小(字节数)即流量。
方法一:通过抓包测试法,最直接准确,但是操作步骤长,需要禁用其他 App 联网权限且需要 root 权限
方法二:TCP 收发长度统计,App 通信基本上基于 TCP,计算 TCP 的数据,这种方式简单不需要禁止其他 App 的联网权限,但这种方式 UDP 获取不到,只能获取 TCP 协议的流量
我们也可以借助 adb 命令分析网络流量adb shell dumpsys netstats detail
通过获取各种数据包,显示网络连接统计数据,包括网络名以及连接的 Wi-Fi 名称、开始时间、结束时间等信息。
用户反馈操作 App 很不流畅,界面卡顿
大多数用户感知到卡顿等性能问题的最主要根源都是因为渲染性能,Android 系统无法及时完成复杂的界面渲染操作,就产生了卡顿/不流畅的现象。
1、渲染性能
中间的绿线是基准,超过绿色线越多,代表 GPU 工作越吃力,也就是我们说的卡顿。
我们也可以借助 adb 命令渲染性能的分析adb shell dumpsys gfxinfo package-name
2、界面过度绘制
表示某些组件在屏幕上的一个像素点的绘制次数超过 1 次
一般来说,蓝色和绿色是可以接受的,性能比较优秀
3、频繁 GC
系统卡顿和自己本身也有关系,先天性不足,先在 Linux 上跑虚拟机,然后再用 Java 做开发,在后期优化上的成本增加更多,Java 没有提供任何操作来释放内存,是通过系统的内存回收机制(GC)来进行管理,但是 GC 时所有线程要暂停,也就是所谓的卡顿。
Android4.4 引进新的 ART 虚拟机来取代 Dalvik 虚拟机,Dalvik 虚拟机的 GC 是非常消耗资源的,ART 虚拟机的 GC 会动态提升垃圾回收的效率。
我们可以借助 adb 命令内存分析adb shell dumpsys meminfo package-name
Android 程序内存被分为两部分:native 和 dalvik,dalvik 就是我们常说的 Java 堆,我们创建的对象是在这里分配的,native 部分通常是指 C/C++实现部分分配的内存。
用户反馈手机检测到 App 耗费电量
影响电量的因素:CPU、wakelock、无线数据(3G/4G/5G)、蓝牙、相机、GPS 等
我们可以借助 SDK 自带的反编译工具 framework-res.apk
手机中的每个组件,CPU、GPS、WI-FI 等运行时的能耗标准都保存在 power_profile.xml 文件中,运用反编译工具获取到手机的 power_profile 文件,本地获取文件给开发即可。
LJW:信也科技国际化测试专家
Java、大数据、前端、测试等各种技术岗位热招中,欢迎扫码了解~