一:什么是性能测试
性能(performance):是系统实现其功能的能力。例如,响应时间、吞吐能力、事务处理数。
性能测试,是指在特定负载情况下,确定系统的响应速度和稳定性的表现。它也可以研究、测量、验证系统的其他特征,比如可扩展性、可靠性和资源使用率。通俗的讲:通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生成性能要求,即在特定的运行条件下验证系统的能力状况。
按手游构成特点,将性能测试分为客户端性能、服务器性能两大块。(性能测试包括但不仅限于这些,还包括负载测试,压力测试,可靠性测试等。)
二、性能测试五大误区
1:性能测试不重要
其实很多问题的原因就是性能导致的,例如“游戏玩到一半,突然来了个电话,再返回时游戏界面崩溃”、或者“在你好不容易在手机上打了一大段字,正要发送时,来了条短信,而记事软件已经崩溃,辛辛苦苦编辑的内容早就没了” 这类问题非常容易引起玩家的反感,造成流失。
2:性能测试要覆盖到所有功能
性能测试的主要目的是为了系统调优。不可能对所有的系统功能都进行性能测试。在测试设计时需要结合当时的实际系统,先分析软件可能存在的瓶颈,此时可依据“二八原则”分析:对系统资源的利用、数据大量传输、数据转换、用户使用频率、逻辑复杂度等进行分析,选择要执行的功能和场景,再依此制定性能测试的方案。
3:性能测试主要就是测试工具的使用
我做不好性能测试,是因为对测试工具不熟悉;测试工具可以自动生成我所需要的报表;依靠性能测试工具就能准确定位。测试工具在测试中只起到辅助性作用,而测试方案、测试场景的分析、问题的定位这才是性能测试的关键。不要期望测试工具能够生成你想要的所有东西(报表、瓶颈分析),工具只能尽可能多的提供给我们分析的依据。
4:提高一下硬件配置就可以提高性能了,因此性能测试不重要
随着软件规模的扩大,提高硬件配置只是解决性能问题的一个基本手段。因为如果软件自身存在性能问题,再多的资源可能也不够用,例如:内存泄漏问题,随着时间的增加,内存终究会被耗尽,最后导致系统崩溃;算法逻辑问题导致程序缓慢。即使已经提高配置,也要首先用性能测试的方式得出哪些硬件可能存在瓶颈。
5:随便找个环境下进行一下性能测试就可以了
做性能问题分析可以在类生产环境上进行,配置可以有些差别,一般性能测试还是在类生产环境进行,原因有两个:1、性能测试要尽可能早的完成,提早发现问题并整改;2、在生产环境进行测试可能会造成脏数据。
三:性能指标:
1:客户端性能的关键指标:
CPU占用率、内存占用率、流量耗用量、FPS(每秒传输帧数)、耗电量等
1)、包体大小
包体大小能被列为性能指标,是从APP性能指标及运营两个维度考虑的,用户是更希望包体小的同时性能要好,有时它们会是一个互相取舍的关系。
2)、启动时长
移动应用的启动时间是用户体验的一个重要方面,IOS一直建议尽可能的缩短启动时间,防止用户不愿意使用它们。
启动时间分为首启动(首次安装后第一次启动时长)、冷启动(已启动过的程序杀进程重新启动)和热启动(程序在手机后台时启动)。
3)、内存使用
在Android系统中,每个APP进程除了同其他进程共享(shared dirty)外,还独用私有内存(private dirty),通常我们使用PSS(=私有内存+比例分配共享内存)来衡量一个APP的内存开销。移动设备的内存资源是非常有限,为每个APP进程分配的私有内存也是有限制。一方面我们要合理的申请内存使用,以免导致频繁的GC(垃圾回收机制)影响性能和内存溢出;另一方面,我们要及时释放内存,以免发生内存泄漏。
4)、CPU占用率
一般情况下,用主流手机使用APP20%-40%的CPU占用率算是合理的,当然这个数值随着近年来手机硬件配置的提高,会略微下降,如果CPU占用率超过80%就非常值得我们去关注了。
5)、FPS
可用来指示页面是否平滑的渲染。手机APP帧率FPS,30-60都可接受,上了60对于人眼主观感受差别就不大了。对于移动应用开发而言,并不是FPS越高就一定越好,FPS取决于显卡,其次是内存、CPU,然后是网络。故综合APP其他性能指标,选择一个适合的FPS即可。
6)、电量
相对于PC来说,移动设备的电池电量是非常有限的,保持持久的续航能力尤为重要。另外,android的很多特性都比较耗电(如屏幕,GPS,sensor传感器,唤醒机制,CPU,连网等的使用),我们必须要慎重检查APP的电量使用,以免导致用户手机耗电发热,带来不良体验。
7)、流量
目前的网络类型包含2G\3G\4G\5G\wifi,其中还有不同运营商的区分,我们在APP的使用中经常遇到大资源,重复请求,调用响应慢,调用失败等各种情况。在不同的网络类型之下,我们不仅要控制流量使用,还需要加快请求的响应。另外,对于需要联网的手游来说,部分游戏对不同联网方式的网络类型采用了不同的流量消耗策略,主要分为wifi环境和蜂窝网络环境。所以针对不同的游戏,我们统计流量消耗时,可能要连接不同的网络进行测试。
2:服务器性能的关键指标:
响应时间、并发用户数、吞吐量(每秒事务数)等
1)、响应时间
响应时间有两种理解,一是应用系统从请求发出开始到客户端收到响应所消耗的时间,二是应用系统从请求发出开始到客户端接收到最后一个字节数据所消耗的时间。从用户角度看,响应时间是用户感受系统性能的主要体现,既有客观成分又有主观成分。
响应时间分为呈现时间、网络传输时间、系统处理时间。
2)、并发数
并发量指的是系统能够同时处理的请求数量,反映的是系统的负载能力。
我们在对高并发系统进行优化的时候,往往也会在并发量上进行调优,调优方式也是多种多样的,目的就是提高系统同时处理请求的能力。
3)、吞吐量
吞吐量是指单位时间内系统能处理的请求数量,体现系统处理请求的能力,这是目前最常用的性能测试指标。
QPS(每秒查询数)、TPS(每秒事务数)是吞吐量的常用量化指标,另外还有HPS(每秒HTTP请求数)。
四、如何做性能测试
- 明确测试目标,了解性能测试需求;
- 分析性能测试需求,编写性能测试方案;
- 相关资源准备;
- 执行性能测试并收集测试结果;
- 分析结果,并且给出优化建议;
- 系统调优及再测试;
1:明确测试目标,了解性能测试需求
在做性能测试计划的时候,我们首先需要充分思考这几个问题:
- 我们需要知道系统的哪些性能情况?
- 我们要采用哪种类型的性能测试,通过哪些测试场景来评估系统的性能情况?
- 按照我们制定的性能测试计划,最终拿到的测试结果能不能支持推断出系统性能是否符合业务目标的结论?
1)、明确目标、了解需求
要回答第一个问题,最好的切入点是了解业务目标是什么。
- 业务目标的确定:在做性能测试计划前,我们应该向项目组核心成员去了解业务情况,询问项目经理、运营、产品、技术负责人,预期的业务量是多少?未来规划的提升量是多少?在哪些方面有特殊的业务要求,比如哪些场景对响应时间有强要求,是否会有促销手段可能导致线上出现秒杀情况等等。
- 性能风险的推测:条件允许的情况下,我们还可以向项目组的每个参与者了解情况:你最担心系统出现的性能问题是什么?为什么会有这样的担心?有时候项目的核心成员并不清楚系统设计的细节,而那些被忽略的细节又常常出其不意的在线上带给我们麻烦。
- 整理自己对业务的理解,梳理收集到的业务目标和问题,将业务化的目标转化成明确的性能测试目标。
2:分析性能测试需求,编写性能测试方案
1)、性能测试目的
我们应该明确性能测试的目的,了解被测业务特点和业务目标,并将业务目标转化为明确的性能指标。为了更好的帮助我们理解被测系统,画出被测系统架构图是很必要的,在整个系统架构图中,确定被测系统范围,集中精力到需要关注的性能表现上。
2)、性能测试环境
- 了解清楚生产环境的各种配置,明确测试环境需要的硬件、软件条件;
- 思考是否需要借助其他辅助工具来完成性能测试任务;
- 充分对比生产环境和测试环境差异,差异说明可以为后续分析和推测线上性能情况提供参考信息
3)、测试场景设计
- 通过对性能测试需求的调研,分析出性能测试需要覆盖的场景;
- 性能测试工作要分为哪几个步骤进行,每个步骤的开始/结束时间,及对应的负责人;
- 性能测试需采集的指标
4)、测试执行计划
- 测试执行策略,例如单个场景执行三次,统计平均值;
- 测试执行完成条件
5)、风险说明
- 排期风险;
- 技术风险;
- 资源风险
以上是基于个人的有限性能测试经验总结出的几个关键点,包括做性能测试设计时应该注重的几个关键问题,同时给出了一个性能测试计划里应包含的关键部分。具体实践中,涉及到的问题可能还有很多,设计方案还需要考虑方方面面的因素,但是这些关键要素能帮我们快速思考清楚如何准备当前的性能测试任务。
3:相关资源准备
- 在进行性能测试之前,需要先完成性能测试环境的搭建工作,测试环境一般包括硬件环境、软件环境及网络环境。
- 性能测试对测试环境的独立性要求更高,更为严格。
- 如果某环境下运行多个系统,就很难判断其中的某个环境对资源的占用情况。
- 尽量保持性能测试环境与真实生产环境的一致性
1)、硬件环境
- 包括服务器环境,网络环境,客户端选择等
- 客户端选择可以根据品牌,操作系统,机型等多个维度综合选择。
- 一般会根据所在国家的手机品牌选择不同操作系统(Android、ios)的不同机型(分为底、中、高端)
2)、软件环境
- 版本一致性:包括操作系统、数据库、被测应用程序、第三方软件等
- 配置一致性:包括操作系统、数据库、被测应用程序、第三方软件等
3)、使用场景的一致性
- 基础业务数据的一致性:尽量模拟真实场景下的业务数据使用情况
- 业务操作模式的一致性:尽量模拟真实场景下用户的业务功能使用情况
4:执行性能测试并收集测试结果
- 执行性能测试
- 记录性能测试结果数据
5:分析结果,并且给出优化建议
- 按照测试报告模板来进行编写。通常包含内容如下:
- 测试目标
- 测试结论(通过/不通过)
- 性能测试的过程记录:如测试范围、指标数据、发现的问题、调优结果等
- 性能测试过程中的风险,当前是否还存在风险
- 本次性能测试的复盘总结
6:系统调优及再测试
- 确定问题:根据性能监控的数据和性能分析的结果,确定性能存在的问题。
- 确定原因:确定问题之后,对问题进行分析,找出问题的原因。
- 确定解决方案(改服务器参数配置/增加硬件资源配置/修改代码)。
- 验证解决方案,分析调优结果。
注意:性能测试调优并不是一次完成的过程,针对同一个性能问题,上面的步骤可能要经过多次循环才能最终完成性能调优的目标(即:测试发现问题 -> 找原因 -> 调整 -> 验证 -> 分析 -> 再测试 ...)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫