跳转至

性能测试

约 2506 个字 预计阅读时间 8 分钟

性能测试概念

性能测试是指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试的过程。其主要目的是验证系统是否能够满足预期的性能需求,发现系统的性能瓶颈,并为系统优化提供依据。

性能测试不仅关注系统的响应速度,还包括系统的稳定性、可靠性和可扩展性等方面。通过性能测试,可以:

  • 验证系统性能:确认系统是否满足性能需求规格
  • 发现性能瓶颈:识别系统中影响性能的关键因素
  • 评估系统容量:确定系统能够支持的最大用户数和数据量
  • 优化系统配置:为系统调优提供数据支持
  • 预测系统行为:在不同负载下预测系统的表现

性能测试通常包括负载测试、压力测试、容量测试、稳定性测试等多种类型,每种测试类型都有其特定的目标和应用场景。通过综合运用这些测试方法,可以全面评估系统的性能特征

常见的性能测试指标

常见的性能测试指标分为下面几种:

  1. 并发数:在同一时间点内,系统能够同时处理的用户请求或事务的数量,它是衡量系统并发处理能力的重要性能指标
  2. 吞吐量:系统在单位时间内能够成功处理的请求数量或事务数量,通常用每秒处理的请求数(TPS/QPS)来衡量系统的处理能力
  3. 响应时间:从用户发送请求到系统返回响应结果所需要的时间,通常以毫秒为单位,是衡量系统性能和用户体验的关键指标
  4. 事务:一个完整的业务操作单元,由一系列相关的操作组成,这些操作要么全部成功执行,要么全部失败回滚,确保数据的一致性和完整性
  5. 资源利用率:系统在运行过程中对CPU、内存、磁盘I/O、网络带宽等硬件资源的使用程度,通常以百分比表示,用于评估系统资源的使用效率和性能瓶颈

在事务中,有两个常见的指标,分别是TPS和QPS:

  1. TPS(Transactions Per Second):每秒事务数,指系统在一秒钟内能够处理的事务数量。衡量的是完整业务操作的处理能力
  2. QPS(Queries Per Second):每秒查询数,指系统在一秒钟内能够处理的查询请求数量。衡量的是单个请求的处理能力。若一个事务中只有一个接口且是查询接口,则QPS = TPS

计算TPS的方式为:TPS = 总事务数 / 总时间(秒)

具体计算步骤:

  1. 确定测试时间范围:例如测试持续60秒
  2. 统计完成的事务总数:例如在60秒内完成了1200个事务
  3. 应用公式计算:TPS = 1200 / 60 = 20 TPS

性能测试关注点

开发人员和测试人员并不需要关注全流程的性能问题。通过分析不同角色的侧重点,从而促进性能测试更好的开展。和软件系统性能相关的角色主要有四种:

  1. 终端用户:表现为用户进行业务操作时的主观响应时间。用户重点关注从提交请求到收到响应的时间,包括系统响应时间和前端展现时间
  2. 系统运维人员:除了关注单个请求的响应时间,更关注大量用户并发访问时对系统的影响,以及更大负载情况下的系统健康状态,从而执行系统的、整体的策略
  3. 软件设计开发人员:关注算法设计、架构设计、性能最佳实践、数据库相关、软件性能的可测试性等方面
  4. 性能测试人员:工作重点在于性能测试场景的设计、脚本的开发和执行,以及性能缺陷的排查和定位

性能测试分类

性能测试一般分为下面几种:

  1. 基准测试(Benchmark Testing):又称单用户测试,主要用于监测被测系统在较低压力下的运行状况并记录相关数据。当性能测试环境确定以后,通常选取业务模型中的重要业务做基准测试,对被测系统施加一定压力,从而获取被测系统在单用户运行情况下的各项性能指标,为多用户并发测试和混合场景测试等提供参考依据
  2. 并发测试(Concurrency Testing):用于评估被测系统的某些特定操作同时发生时的性能表现,例如,被测系统被多个用户同时登录时的响应能力,或系统的某一功能被多个用户同时操作时的性能表现。通过并发测试,不仅可以获得被测系统在多用户并发操作时的性能指标,还可以发现被测系统在并发条件下可能发生的问题,如内存泄漏、线程锁、资源争用问题。例如,通过模拟多个用户同时访问某一条件数据,或模拟多个用户同时更新数据,可能会发现被测系统的数据库访问错误、写入错误等。几乎所有的性能测试都会涉及一些并发测试。但并发测试对并发时间要求比较苛刻,通常需借助专门的性能测试工具,采用多线程或多进程的方式来模拟多个虚拟用户的并发性操作
  3. 负载测试(Load Testing):是性能测试的一种测试类型,用于评估被测系统在预期的不同负载下的行为。负载测试关注系统处理不同负载的能力,这些负载可通过控制并发用户或者进程的数量来实现。进行负载测试时,通过对系统不断增加并发访问负载,监测系统性能的变化,直到系统的某项或多项性能指标达到安全临界值,最终确定在满足该安全临界值的性能指标下,系统所能承受的最大负载量。简而言之,负载测试是通过逐步加载的方式来确定系统的处理能力。负载测试类似于举重运动,通过不断给运动员增加重量,确定运动员在其身体状况保持正常的情况下所能举起的最大重量。通过负载测试可以获取系统能够达到的峰值指标。例如,一个软件系统的响应时间要求不超过2秒,如果在这个前提下不断增加用户访问量,系统的响应时间就会变长。假设当访问量超过1万人时系统的响应时间超过2秒,那么就可以确定在系统响应时间不超过2秒的前提下,系统的最大负载量是1万人。负载测试可用于系统的性能验证、性能诊断和性能调优等场景
  4. 压力测试(Stress Testing)用于评估被测系统在高于预期、高于指定容量负载需求或低于最少需求资源的条件下的行为。压力测试关注被测系统处理超出预期或特定峰值负载的能力,也可以用于评估系统在资源匮乏时的处理能力,比如在可用的计算能力、带宽和内存资源不足的条件下系统的表现。进行压力测试时通常采用逐步增加系统负载的方式,使系统某些资源达到饱和甚至失效,从而发现那些只有在高负载条件下才会出现的缺陷,如同步问题、内存泄漏等。通过对被测系统进行压力测试,也能找出被测系统的性能拐点,获得系统所能提供的最大服务级别(系统所能承受的最大压力),评估系统在峰值负载或超出最大负载情况下的处理能力。压力测试主要用于性能诊断、性能调优和容量规划等场景
  5. 稳定性测试:在负载测试的基础上,执行较长时间的测试以检查系统的稳定性。通常较长时间指3*24小时以上

压力测试和负载测试的区别:

压力测试与负载测试不同。负载测试是在保持性能指标要求的前提下测试系统能够承受的最大负载,而压力测试则是测试系统性能达到极限的状态。例如,软件系统要求的响应时间为2秒。进行负载测试时发现,当访问量达到1万时,系统响应时间不超过2秒,而当访问量超过1万时,系统响应时间则会超过2秒,那么,在满足系统响应时间指标的前提下,该系统能够承受的最大访问量是1万。进行压力测试时,则可继续增加系统的访问量,并观察系统的性能变化。例如,当系统访问量增加到2万时,发现系统响应时间延迟到5秒,而当访问量增加到3万时,系统则崩溃,无法做出响应。由此可以确定系统能达到的极限访问量是3万

性能测试工具JMeter

使用查看文档补充