当前位置: 首页 > news >正文

APP CPU测试--Android Profiler实操(入门版)

背景:

      我们经常会在长时间打游戏或看视频后碰到手机会出现发热发烫的现象。这是因为CPU使用率过高、CPU过于繁忙,会使得整个系统无法响应用户,整体性能降低,用户体验变得相当差。

一、CPU测试

        广义的CPU测试:通过测试应用CPU的占用,可用于发现一些性能上的逻辑错误、异常、高资源占用;包括前端方法调用异常、接口服务异常、后台服务逻辑错误等常见的严重性能问题;

二、环境准备

 2.1  手机通过USB线连接PC。(设置--开发人员选项--USB调试 开启)
 2.2   打开AndroidStudio,从底部的控制台选择Android Profiler


3、如果底部没有Android Profiler选项,可以从顶部工具栏 View—Tool Windows—Profiler


3、在Android Profiler中,点击“+”,然后选择已连接的设备及自己要测试的APP的进程名,如【com.xxxx.xxx】。

点击后,如下图,我们可以看到Android Profiler分为四大模块: CPU、内存 、网络、能耗:


4、单击CPU时间轴中的任意位置打开CPU Profiler,如下图所示;点击箭头可返回上一级页面

三、通用测试步骤

 1.进入测试页面并操作页面一段时间,然后停止操作,看CPU的变化情况。
 2.进入测试页面,操作一段时间后,将app置于后台,看CPU的变化情况。
 3.APP启动过程中,查看CPU的变化情况。

四、具体实施步骤

4.1  业务测试
1)手机连接PC,并打开AndroidStudio客户端的Android Profiler;
2)选择自己要测试App的包名;
3)在Profiler的cpu面板上查看CPU数据;
4)进入测试页面(测试页面的个数由用例决定),操作页面(比如滑动页面),持续一段时间(自己把握,覆盖完自己的用例),然后停止操作,最长时间约20s后,如果App占有率没有降低到0%,那么就有可能有问题。


4.2 静默测试
1)进入测试APP,操作一段时间(覆盖主要业务)

2)然后将APP放到后台锁屏,静置约20分钟,查看CPU的变化情况。正常应该是维持在0%,这个过程中会有心跳包(一般是每隔5分钟一次,通过CPU也能检查心跳是否正常)会造成CPU波动,除此之外,再有其他CPU波动,可能就存在问题。


4.3  APP启动过程
    1)APP首次启动过程及启动之后在首页静置约5分钟,查看CPU的变化情况。若启动之后静置,CPU还不能降到0%,那么就有可能存在问题。

   2)APP热启动过程及启动之后在首页静置约5分钟,查看CPU的变化情况。若启动之后静置,CPU还不能降到0%,那么就有可能存在问题。

   3)APP冷启动过程及启动之后在首页静置约5分钟,查看CPU的变化情况。若启动之后静置,CPU还不能降到0%,那么就有可能存在问题。


 4.4 问题记录

当出现问题时,要保存测试环境,提bug时要上传。
     怀疑CPU出现问题的时候,我们可以用Profiler的【Record】来抓取方法调用

单击stop则可以停止采集,停止采集后AndroidStudio默认会打开xxx.trace文件栈。

我们可以点击保存按钮,将生成cpu-xxx.trace文件导出到本地目录下

保存成功后,可以在本地目录看到cpu-xxx.trace文件


     保存测试时的日志信息,可以执行命令:  adb logcat >D:\log\log.log

五、测试结果分析

1.分析问题,我们主要分析抓取的cpu-xxx.trace文件。


2.详细的分析过程

我们可以先找开发沟通了解测试app的相关线程和方法名

我的Android Studio版本有点问题,找另一台电脑抓取的,正确的图片应如下图:

分析问题一般思路:
  1) 首先可以通过搜索来过滤自己的关键字。
  2) 其次找到搜索结果即 自己关心的方法。
  3) 在数据详细信息页面中查看方法的具体情况(执行次数、占比、执行时间等)。
  4) 常见的问题有:方法被递归调用、代码逻辑造成的不必要的代码调用等。

六、测试标准

6.1  操作时
        cpu占有率,最高不超过50%(持续性的),如果过高,需要排查下原因;

6.2  静默CPU
        静默时,App  cpu占有率是0

http://www.lryc.cn/news/572809.html

相关文章:

  • Flutter ListTile 深度解析
  • 【二进制安全作业】250617课上作业4 - start
  • springboot整合规则引擎(liteflow)使用
  • 解决Docker网络与虚拟机桥接冲突的实践指南
  • Docker环境部署
  • Dilworth 定理 学习笔记
  • html和css实现文本打断换行、自动换行
  • leetcode hot100 两数之和
  • Unity2D 街机风太空射击游戏 学习记录 #12环射道具的引入
  • C语言:实现杨辉三角的种方法
  • Linux命令合集
  • LVS负载均衡群集:Nginx+Tomcat负载均衡群集
  • 云宏信息轻量云平台:解锁金融业IT架构优化之路
  • Postman接口测试完整版
  • 《P2161 [SHOI2009] 会场预约》
  • 将无序json数据转换为excel表格形式
  • 【FineDance】vis.py 硬编码路径的修复
  • 服务器手动安装并编译R环境库包:PROJ→RGDAL
  • RenderDoc抓webgl 1
  • 科技赋能民生:中建海龙为民生改善注入新动力
  • 【CS创世SD NAND征文】STM32户外无线终端管理设备的数据存储方案
  • Logback 在java中的使用
  • 力扣-169.多数元素
  • [muduo] docs | 配置教程 | EventLoop | Thread
  • python实战项目76:51job数据采集与分析
  • 14.9 AI教学系统测试全攻略:模块化调试与5大模块实战指南
  • 服务网格安全(Istio):用零信任架构重构微服务通信安全
  • 【Linux驱动开发 ---- 4.2_平台设备(Platform Devices)概述】
  • 基于深度学习的智能视频行为识别系统:技术与实践
  • 解决Windows10没有Microsoft store微软商店