软件测试面试题——如何测试App性能?
为什么要做App性能测试?
如果APP总是出现卡顿或网络延迟的情况,降低了用户的好感,用户可能会抛弃该App,换同类型的其他应用。如果APP的性能较好,用户体验高,使用起来丝滑顺畅,那该应用的用户粘性也必然会提高。
那我们该如何做App性能测试,以及该关注哪些指标呢?

怎么做App性能测试?
目前,基本上都使用现有的工具来进行性能测试,比如 Android studio 中有自带工具。
也有其他公司开源的一些 性能测试的工具,主要还是分为两种,一种是自研的,一种是外部提供的开源/收费的。
自研:一般每家公司都会有都会有自研的收集性能数据的平台,当然有些是购买的外部的服务,经过二次开发之后再供使用。
开源:各大公司都有一些开源的软件免费供大家使用。
下面几款开源工具:
1、TraceView
TraceView 是Android平台配备一个性能分析的工具,用于分析计算性能,跟踪方法耗时导致的卡顿问题。它使用图形化的方式把结果呈现出来,直观的反应出代码的执行时间、执行次数。
如何使用:通过Android studio自带的traceview查看即可(Android profiler)。开发人员使用此工具的比较多,测试人员一般使用其他的开源App。
2、Emmagee
网易开发的一个Android性能监测工具,它可以可以监控单个应用性能, 并且支持用户自定义配置监控的采样频率以及性能的实时显示,最终会生成一份性能统计文件。
开源地址:https://github.com/NetEase/Emmagee ,在该地址可以下载到Emmagee 的安装包以及相关使用说明,只支持Android。
3、GT
GT(随身调)是腾 讯开源的,它支持iOS和Android两个手机平台。
GT Android版是腾讯 MIG 专项测试组自行研发的 Android APP 随身调测平台,它是直接运行在手机上的“集成调测环境”(ITE, Integrated Test Environment)。
利用GT,仅凭一部手机,无需连接电脑,即可对APP进行快速的性能测试(CPU、内存、流量、电量、帧率/流畅度等等)、开发日志的查看、Crash日志查看、网络数据包的抓取、APP内部参数的调试、真机代码耗时统计等。
开源地址:https://github.com/Tencent/GT
4、soloPi
支付宝开源的Android自动化工具,主要有录制回放、性能测试、一机多控三项主要功能。
录制回放:SoloPi拥有录制操作的能力,用户只需要通过SoloPi执行用例步骤,SoloPi就能够将用户的操作记录下来,并且支持在各个设备上进行回放,这一切都能够在手机上独立完成。
性能测试: SoloPi能够记录待测应用的各项指标,你可以在悬浮窗中观察实时更新的数据,也可以对性能数据进行录制,在录制结束后查看图表;同时,Soloπ还支持性能加压,能够对CPU、内存进行限制,复现应用在性能较差、网络环境不佳场景下的表现。
一机多控:SoloPi支持通过操作一台主机设备来控制多台从机设备,不需要在各个设备上分别进行重复冗杂的兼容性测试,能够极大提升兼容性测试的效率。
开源地址:https://github.com/alipay/SoloPi/wiki/Performance
市面上常见的性能测试工具就这几款,可以根据自己的需求选择。笔者最近常用SoloPi。

APP性能测试关注哪些指标?
1、启动耗时
App启动耗费的时间是我们一个重要的时间,其中又分为热启动和冷启动等。
测试启动时间比较依赖人为判断,一般我们是通过录屏,然后使用分帧的工具对 启动时屏幕渲染的过程做一个精细化的耗时分析。
优点:能真实反馈App的耗时;无侵入,离线分析,可对竞品进行精细化分析
缺点:判断时间比较依赖人肉眼判断,自动化工具无法判断。
2、单位时间耗电量、单位时间网络流量消耗
3、移动终端相关资源的利用率:不仅仅服务器端的CPU、内存、磁盘I/O、网路是性能测试关注的重要内容,移动端的CPU、内存也是我们需要关注的内容之一。
- cpu 主要关注运行时cpu占有率和后台情况下的cpu占有率;
- 内存 进入某个业务场景下的的内存增量, 和 在多链路执行国购的 内存总消耗。
4、业务响应时间、帧率(fps):由于人类的特殊结构,当看画面的帧率高于24的时候,就会认为是连贯的。fps越高,画面越流畅。
- FPS 分为滑动时的FPS,如果涉及视频/动画/直播,还要该业务运行时的FPS。
以上,对APP性能测试做了个简单的介绍,了解了常见的工具以及性能指标,后续要学习的就是如何设计APP性能测试用例、APP性能测试的执行以及报告的编写等等~

相关文章:
软件测试面试题——如何测试App性能?
为什么要做App性能测试? 如果APP总是出现卡顿或网络延迟的情况,降低了用户的好感,用户可能会抛弃该App,换同类型的其他应用。如果APP的性能较好,用户体验高,使用起来丝滑顺畅,那该应用的用户粘…...
玩转C链表
链表是C语言编程中常用的数据结构,比如我们要建一个整数链表,一般可能这么定义: struct int_node {int val;struct int_node *next;}; 为了实现链表的插入、删除、遍历等功能,另外要再实现一系列函数,比如:…...
MySQL表的基础的增删改查
增(insert into) 插入所有列的数据 不写具体列名要确保字段都对应正确 -- 假设你有一个名为 "employees" 的表,有多个列 INSERT INTO employees VALUES (101, Alice, Manager, 50000);插入指定列的数据 -- 假设你有一个名为 "students" 的表&…...
数字化车间
一、数字化车间概述 数字化车间是以现代化信息、网络、数据库、自动识别等技术为基础,通过智能化、数字化、MES系统信息化等手段融合建设的数字化生产车间,精细地管理生产资源、生产设备和生产过程。随着工业4.0概念的提出,未来的工业和制造…...
基础堆排序
目录 基础堆排序 一、概念及其介绍 二、适用说明 三、过程图示 基础堆排序...
ISC 2023 | 赛宁网安验证评估 重磅发布
8月9日-10日,第十一届互联网安全大会(简称ISC 2023)在北京国家会议中心隆重举办。作为本次大会的战略合作伙伴(最高级别),赛宁网安主办 “安全验证评估论坛”,邀请邬江兴院士与业界专家共同…...
浅谈AI浪潮下的视频大数据发展趋势与应用
视频大数据的发展趋势是多样化和个性化的。随着科技的不断进步,人们对于视频内容的需求也在不断变化。从传统的电视节目到现在的短视频、直播、VR等多种形式,视频内容已经不再是单一的娱乐方式,更是涉及到教育、医疗、商业等各个领域。 为了满…...
github 无语的问题,Host does not existfatal: Could not read from remote repository.
Unable to open connection: Host does not existfatal: Could not read from remote repository. image.png image.png image.png Please make sure you have the correct access rights and the repository exists. 如果github desktop和git pull 和git clone全部都出问题了&…...
机器学习基础之《特征工程(4)—特征降维—案例》
一、探究用户对物品类别的喜好细分 1、找到用户和物品类别的关系 数据如下: (1)order_products__prior.csv:订单与商品信息 字段:order_id,product_id,add_to_cart_order,reordered…...
docker 删除镜像文件
docker 容器里面太多镜像,D盘满了 四 查看和移除镜像 1 查看镜像 docker images 2 移除镜像命令 docker rmi 镜像名称 # 只输入前四位即可 五 实际有效操作 清除所有不使用的资源 docker system prune 这个命令将会删除所有不使用的镜像、容器和数据卷等资…...
ArcGIS Pro 基础安装与配置介绍
ArcGIS Pro ArcGIS Pro作为ESRI面向新时代的GIS产品,它在原有的ArcGIS平台上继承了传统桌面软件(ArcMap)的强大的数据管理、制图、空间分析等能力,还具有其独有的特色功能,例如二三维融合、大数据、矢量切片制作及发布…...
剑指 Offer 13. 机器人的运动范围
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如&am…...
技术应用:Docker安全性的最佳实验|聊聊工程化Docker
🔥 技术相关:《技术应用》 ⛺️ I Love you, like a fire! 文章目录 首先,使用Docker Hub控制访问其次,保护密钥写在最后 不可否认,能生存在互联网上的软件都是相互关联的,当我们开发一款应用程序时&#x…...
【Tomcat】Tomcat部署及优化
Tomcat 它是一个免费、开源的web应用服务器;基于java代码开发的软件;处理动态请求和基于Java代码的页面开发; 可以在html当中写入Java代码,Tomcat可以解析html页面当中的Java代码,执行动态请求以及动态页面 缺点&#…...
xAI与GPT-4:探索宇宙真实本质的AI之战
xAI与GPT-4:AI之战 写在前面第一部分第二部分推动科学研究提升人机交互引发伦理和社会问题 第三部分模型的进一步优化跨领域合作人机融合 最后总结 写在前面 人工智能(AI)领域的发展一直以来都备受关注,而近期马斯克宣布成立xAI&…...
unity vscode 代码关联 跳转 BUG
一早打开电脑发现代码关联失效了,目测可能跟昨天一些插件更新有关 结论 就这货,开了就没法提示代码关联,估计预览版全是BUG。 另一个坑 同期有个unity插件也是预览版,“非常好使”,当场去世。评论点开有好几个人说用…...
Linux命令200例:tree用于以树状结构显示文件和目录
🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 &…...
[C++项目] Boost文档 站内搜索引擎(5): cpphttplib实现网络服务、html页面实现、服务器部署...
在前四篇文章中, 我们实现了从文档文件的清理 到 搜索的所有内容: 项目背景: 🫦[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍…文档解析、处理模块parser的实现: 🫦[C项目] Boost文档 站内搜索引擎(2): 文档文本解析模块…...
PO、VO、DAO、BO、DTO、POJO 能分清吗?
一、PO :(persistant object ),持久对象 可以看成是与数据库中的表相映射的java对象。使用Hibernate来生成PO是不错的选择。 二、VO :(value object) ,值对象 通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的…...
31 | 独角兽企业数据分析
独角兽企业:是投资行业尤其是风险投资业的术语,一般指成立时间不超过10年、估值超过10亿美元的未上市创业公司。 项目目的: 1.通过对独角兽企业进行全面地分析(地域,投资方,年份,行业等),便于做商业上的战略决策 项目数据源介绍 1.数据源:本项目采用的数据源是近…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
