如何做好性能测试

一、什么是性能测试

因为现在系统越来越复杂,有时候我们真不知道系统啥时候会出现问题,尤其是那些性能问题。所以啊,性能测试就像我们给系统做个全面体检,提前发现那些可能存在的隐患,避免问题发生。

那么,什么是性能测试呢?简单说,性能测试就是通过模拟真实场景下系统的运行情况,来评估系统的性能表现。比如说,测试系统在高并发情况下的响应速度、稳定性、可靠性等等。通过这些测试,我们可以了解系统的瓶颈在哪里,哪些地方需要优化,从而更好地满足业务需求。

二、常见的性能测试类型

性能测试有如下几种类型:

  • 负载测试是在被测系统上不断增加压力,直到性能指标(如响应时间)超过预期指标或者某种资源使用已经达到饱和状态。可以找到系统的处理极限,为系统调优提供数据;
  • 压力测试是系统在一定饱和状态下,例如CPU、内存等饱和情况下,系统能够处理的会话能力,以及系统是否会出现错误;
  • 并发测试是模拟多用户并发访问同一个应用、模块或者数据记录时是否存在死锁或者其他性能问题;
  • 可靠性测试是给系统施加一定的业务压力,让其持续运行一段时间,测试在这种条件下能否稳定运行。

三、常见的性能指标

针对不同的性能测试类型,我们要关注的性能测试指标也有不同,以下我列一下常见的性能指标有哪些:

  • 响应时间:指系统对请求的处理时间,包括数据传输和处理时间,是衡量系统性能的重要指标之一。
  • 吞吐量:指在单位时间内系统可以处理多少个请求或处理多少量的数据,是衡量系统处理能力的重要指标之一。
  • 并发用户数:指同时在线、执行操作或访问系统的用户数量,是衡量系统可扩展性的重要指标之一。
  • 资源利用率:指系统占用资源的多少,包括处理器、内存、硬盘等资源的使用率,是衡量系统性能成本的重要指标之一。
  • 错误率:指系统在特定时间段内发生错误的次数,是衡量系统可靠性的重要指标之一。
  • 故障恢复时间:指系统发生故障后,恢复正常运行所需的时间,是衡量系统稳定性的重要指标之一。
  • 系统可用性:指系统在特定时间段内可以正常使用的百分比,是衡量系统运维的重要指标之一。
  • 负载均衡:指系统在面对大量用户访问时,如何合理分配资源,以保证系统的性能和稳定性。

当然还有很多其他的,在这就不一一列举了,有兴趣的小伙伴可以自行百度下。

四、性能测试的步骤

性能测试的步骤一般如下:

首先我们要进行需求分析,确定性能测试的目标、性能需求和业务场景,例如

一般业务性能目标有如下指标:

  1. 吞吐量(PV)、吞吐率(TPS等)、响应时间(RT)/ 应用响应时间(ART);
  2. 事务成功率:99%以上;
  3. 稳定波动正常范围。

然后通过问或者其他方式来获取以下现状:

  • 系统架构:物理架构(硬件及部署策略)和逻辑架构(系统的功能与服务),包括中间件产品与配置、数据库配置等;
  • 业务流程:业务量和业务分布。分析出哪些业务纳入性能测试范围,并量化业务、业务扩展趋势包括年增长率或者未来的业务量、业务高峰的发生时间和高峰业务量、各项业务之间的比例;
  • 用户信息:在线用户数、活跃用户数;
  • 系统现在的性能指标:吞吐率、响应时间、事务成功率,CPU、内存、磁盘、带宽使用阀值等等。

之后我们就可以根据目标来进行制定测试计划了。制定计划中有我们要根据具体的目标使用不同的工具,下面我介绍几个常用的工具:

  1. JMH是Java语言的微基准测试工具(Java Microbenchmark Harness)的缩写。JMH可以帮助我们度量、分析和优化Java程序的性能,我们可以轻松地测试Java代码的运行时间、资源消耗和吞吐量等性能指标,从而更好地了解代码的性能表现,识别潜在的性能瓶颈,并进行针对性的优化。
  2. JProfiler:JProfiler是一种功能丰富的Java性能分析工具,可用于分析Java应用程序的性能瓶颈和内存使用情况。
  3. VisualVM:VisualVM是一种免费的性能监控和分析工具,可用于监视Java应用程序的性能特性和资源利用情况。
  4. JMeter:Apache JMeter是一种功能强大的开源负载测试工具,可用于测试Web应用程序的性能及负载测试
  5. LoadRunner:一款性能测试工具,能够模拟高负载场景以评估软件系统性能,适用于多种平台和协议。

当然现在也有一些国产的工具比较好用的,例如RunnerGo,它的压测模式分为并发模式、阶梯模式、轮次模式、错误率模式、响应时间模式、每秒应答数模式六种模式,我们根据不同场景可以选择适合的方式进行压测。

测试计划包含如下内容:测试内容(可能包含业务性能、可靠性、稳定性等等),业务需求目标,系统业务构成,系统节点构成,测试方法流程,需要监控的指标要求和节点等等。

对于升级、优化类的老系统,可考虑是否存有历史测试方案参考,或许可以省事很多。没有的话最直接的办法就是分析根据系统的数据、统计业务量、业务分布等信息来确定测试内容。然后对业务进行拆分对象,实现这个完整的功能包含哪些流程、环节。比如“购买商品”,具体的流程环节包括“登录->搜索商品->提交订单->支付订单->退出”。接着,明确业务占比,重要程度,目的在于:
(1)明确重点测试对象,安排测试优先级;
(2)建模,混合场景中,虚拟用户资源分配,针对不同业务功能施加不同的负载;
(3)明确下“需求分析-指标分析”中相关业务功能所需基础数据及数据量问题。

然后准备测试环境,例如配置适当的测试环境,包括服务器、网络、数据库等,然后用上述的性能测试工具执行设计的性能测试场景,并记录性能指标和监测系统行为,然后分析性能测试结果,识别性能瓶颈和优化机会,然后针对发现的性能问题,进行系统调优和性能优化,优化后再进行测试,循环往复,直到满足性能测试指标为止。

例如我们测试的目标是并发用户数测试,我们就可以使用负载测试工具逐步增加并发用户数量,模拟用户访问系统,记录系统在不同并发用户条件下的性能指标,如响应时间、吞吐量等,达到系统性能瓶颈或负载极限时,确定系统能够处理的最大并发用户数。如果系统能够处理的并发用户数量如200符合性能需求,则满足业务要求,否则则分析从页面进来的请求路径是什么,分析可能存在的优化空间有什么进行提升然后再进行测试,直到满足业务要求。

总结一下,性能测试不仅可以帮助我们发现潜在的问题,提高系统的稳定性,还可以优化用户体验和确保业务的成功。通过了解系统的架构和功能、分析业务需求、评估资源限制、制定测试计划等步骤,我们可以确定性能测试的范围并选择合适的性能测试工具和指标,从而提高系统的性能表现。但是最好不是一个一次性工作,能定期进行性能测试,要是能深究一下全链路压测这样的技术厂商例如Takin、RunnerGo等,会让性能测试做的更好。

  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
做好性能测试计划需要考虑以下几个关键因素: 1. 确定测试目标:明确性能测试的目的和期望结果,例如确定系统的瓶颈、找出系统的性能瓶颈等。 2. 定义测试范围:明确需要测试的系统组件、功能模块、交易量和用户数量等。确定测试的具体范围有助于规划测试资源和时间。 3. 选择合适的工具:根据系统的特点和需求,选择适合性能测试的工具,例如JMeter、LoadRunner等。确保工具能够模拟实际使用场景和生成足够的负载。 4. 设计测试场景:根据系统的业务流程和用户使用习惯,设计合理的测试场景。考虑并发用户数、事务量、数据量等因素,以及可能存在的异常情况。 5. 准备测试环境:搭建合适的测试环境,包括硬件、软件和网络环境。确保测试环境与生产环境尽可能接近,以保证测试结果的准确性。 6. 制定性能指标:根据系统的需求和用户期望,制定合理的性能指标,例如响应时间、吞吐量、并发用户数等。这些指标可以用于评估系统的性能表现。 7. 编写测试脚本:根据设计的测试场景,使用选择的性能测试工具编写测试脚本。确保脚本能够模拟真实的用户行为和负载,并能够记录相关的性能数据。 8. 执行测试计划:按照测试计划和预定的时间表执行性能测试。监控系统的性能指标,记录测试结果,以及处理可能出现的性能问题。 9. 分析和优化:分析测试结果,识别系统的性能瓶颈和问题所在。根据分析结果,进行性能优化,例如调整系统配置、优化代码、增加服务器资源等。 10. 生成报告和总结:根据测试结果和分析,生成详细的性能测试报告。总结测试过程中的经验教训和改进点,为后续的性能测试提供参考。 以上是一个基本的性能测试计划框架,具体实施时需要根据项目的实际情况进行调整和补充。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值