【腾讯TMQ】【Android场景化性能测试专栏】CPU耗电性能篇

2024-04-14 04:32

本文主要是介绍【腾讯TMQ】【Android场景化性能测试专栏】CPU耗电性能篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、思路简介

在腾讯内部或者业界,耗电性能测试已有非常多的成熟方案。既有高端深入、带着原理去测试的方案;也有直接读取系统文件、读取手机显示电量百分比的方案。如果你也玩《王者荣耀》,前者可以类比于王者高端局,后者则是青铜匹配局,各有各的乐趣。

读取系统文件或采用工具获取整体手机电流值的方法,受影响的因素多,数据波动大,可信度不高,同时从开发角度说,告诉他一个简单的电流值,对他们定位问题的帮助,也不够。

图一源码中计算APP耗电的逻辑

先简单看下Android源码,无需过于深入理解逻辑。在BatteryStatsHelper类中可以发现,某个App的耗电量值,来源于方法processAppUsage,其中包含CPU、wakeLock、移动网络、WiFi、蓝牙、传感器、摄像头、闪光灯等细分耗电量。通过以上分析:

“这个版本,我们APP耗电量高。”

就可以变成:

“这个版本,我们APP占用CPU时间片过高。”

“这个版本,我们APP单位时间收发网络流量过高。”

“……”

与此同时,CPU、wakeLock、移动网络耗电量等细分指标,则都可以成为测试人员关注的专项测试项。同时测试人员也可以根据自己业务团队重点关注的方向,设计对应的专项测试。

二、数据源 #

在linux中,使用cat /proc/pid/stat获取数据,其中第13、14位数据代表utime、stime。如下,这两个值代表pid进程从进程存活以来,在用户态运行的时间为:1587 jiffies,在内核态运行的时间10 jiffies。

utime=1587 该任务在用户态运行的时间,单位为jiffies。

stime=10 该任务在核心态运行的时间,单位为jiffies。

本方案,主要以这两个值为依托,输出APP耗电各场景下的耗电性能。

三、数据采集

首先设计一个基类,用于各类性能测试,包括本篇的CPU耗电,以及内存性能、UI流畅度等其他专项。主要用于统一化测试执行逻辑set_up()、tear_down()中的调用逻辑(都为start和stop)。

图二性能测试基类

Jiffs的收集方案,在set_up()调用JiffsCollector实例的start()方法时,创建定时器1s后开始执行self.__fun_get_jiffs。同样,在__fun_get_jiffs中同样适用定时器每隔5s收集一次/proc/pid/stat中的utime、stime数据,同时计算这5s过程中,进程耗用的CPU时间( =current_utime – last_utime )。同时每收集一次数据,使用__write_line向文本中将本次计算果写入csv文件。

图三JIFFS性能数据收集具体逻辑

四、数据使用

获得单一进程的JIFFS数据后,使用如下表的平均值即可评估出一个特定UI自动化用例场景下,对应的每5秒 utime、stime是否有优化或者达标。

图四平均值评估CPU耗电

但如上,假设获得333.10jiffs/5s这个值,从标准上可以判定其不符合预期,那如何驱动开发去修改问题呢?

开发在得知这个结果之后,需要复现测试的场景,相当于重走了测试同学的执行路径。所以如果测试多走一步,开发就可以少走两步。借助Android Device Monitor工具(Android Studio -> Tools -> Android -> Android Device Monitor),我们可以获取到详细的ThreadJiffs数据。(Tips:DDMS Threads界面可以 ctrl+a全选,ctrl+c复制到excel做排序)。

图五DDMS分析线程CPU占用

在黑盒性能自动化发现有进程有CPU耗电异常之后,使用DDMS分析debug包,一般可以找出几个耗电大头线程。同时使用refresh功能,又可以大致查看到该线程到底是运行在哪些方法上。

通过以上的分析,基本上可以为业务开发找到CPU耗电元凶。其实如果没有前述的黑盒UI自动化框架,测试在黑盒测试中如果感觉到应用总是会导致手机发烫,也可以去用DDMS关注下各个线程的CPU占用时间,找出Thread元凶给开发修改。

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

这里写图片描述

这篇关于【腾讯TMQ】【Android场景化性能测试专栏】CPU耗电性能篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/902079

相关文章

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

MySQL的cpu使用率100%的问题排查流程

《MySQL的cpu使用率100%的问题排查流程》线上mysql服务器经常性出现cpu使用率100%的告警,因此本文整理一下排查该问题的常规流程,文中通过代码示例讲解的非常详细,对大家的学习或工作有一... 目录1. 确认CPU占用来源2. 实时分析mysql活动3. 分析慢查询与执行计划4. 检查索引与表

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤