性能测试是保障系统在高并发、大数据量等复杂场景下能稳定、高效运行的关键测试手段,能提前发现并解决问题、优化资源配置,帮助企业节省成本、降低风险。一份有效的性能测试方案则是性能测试工作顺利开展的基础,本文主要介绍“如何编写一份性能测试方案”。
一、明确项目背景
项目类型
版本
面向用户对象
提供核心能力
二、明确测试目标
常见的性能测试目标:
1. 评估系统当前性能状态
确定基准性能指标:通过在正常负载下进行性能测试,测量系统的关键性能指标,如响应时间、吞吐量、并发用户数等,为系统的性能表现建立一个基准线。这有助于了解系统在当前状态下的性能水平,为后续的优化和改进提供参考。
识别系统瓶颈:在性能测试过程中,观察系统资源的使用情况,如 CPU、内存、磁盘 I/O 和网络带宽等。通过分析这些资源的利用率,找出系统中的瓶颈所在,即限制系统性能提升的关键因素。
2. 验证系统是否满足业务需求
符合性能指标要求:确保系统在规定的业务场景和负载条件下,能够达到预设的性能指标。例如,某在线交易系统要求在处理 1000 个并发用户请求时,平均响应时间不超过 3 秒,吞吐量达到每秒 100 笔交易。
3. 保障系统稳定性和可靠性
测试系统在异常情况下的表现:模拟各种异常情况,如网络中断、服务器故障、大量数据涌入等,测试系统的容错能力和恢复能力。确保系统在遇到这些异常情况时,能够快速恢复正常运行,并且不会丢失重要数据。
长时间稳定性测试:进行长时间的性能测试,验证系统在持续运行过程中的稳定性。例如,连续运行 7×24 小时的测试,观察系统的性能指标是否保持稳定,是否会出现性能下降或系统崩溃的情况。
4. 为系统优化提供依据
定位性能问题:系统性能不满足要求时,性能测试可以帮助定位问题根源。通过分析测试数据和系统日志,找出导致性能下降的具体原因,如代码逻辑问题、数据库查询优化不足、服务器配置不合理等。
评估优化效果:在对系统进行性能优化后,再次进行性能测试,验证优化措施是否有效。通过对比优化前后的性能指标,评估优化效果,为进一步的优化提供参考。
三、明确测试范围
界定测试的内容是要对哪些事务或者功能实现流程进行测试,并说明测试原因。
四、选择测试策略及工具
测试策略:
1.基础策略:负载测试、压力测试、稳定性测试
负载测试:定义好并发数、CPU使用率、内存使用率、平均响应时间、事务失败率的期望值。
并发数:需要定义
持续时间:30min
关注点:根据所定义的并发数执行对应事务,验证结果是否满足预期。
压力测试:定义终止条件(如果遇到性能问题或瓶颈,停止测试;当并发数达到XXX时仍未发现明显性能问题),再进行并发数阶梯式的压测。
并发:50 100 200 500 800(5条用例)
关注点:当前并发数下是否存在性能瓶颈。
稳定性测试:事务在长时间下可以稳定运行,定义好并发数、CPU使用率、内存使用率、平均响应时间、事务失败率的期望值。
持续时间:1d+
关注点:在测试期间是否有性能指标存在异常。
2.特定问题需要进行高并发测试的场景:数据一致性、消息积压、缓存策略
数据一致性:设计用例的组合场景,把数据新增接口(包括缓存数据存储和数据库写入)和对应数据的查询接口组合起来描述成一个 事务,进行高并发测试。
并发数:50(参考)
关注点:判断事务是否存在失败。
消息积压:模拟单实例(消费者和生产者),模拟高并发的消息生产。
并发数:50(参考)
关注点:打开消息积压监控平台,观察是否存在积压情况。
缓存高并发策略:
a. 缓存雪崩:在高并发访问下,大量缓存数据在同一时间过期。
可能导致的问题:数据库崩溃、被测服务崩溃、慢响应。
测试方案设计:前置构建大量的缓存数据,模拟高并发请求,脚本运行开始时间定在缓存数据淘汰前1分钟,脚本结束时间定存在数据淘汰后1分钟。
关注点:会不会导致慢响应、会不会导致服务崩溃。
b. 缓存穿透:在高并发访问下,大量的查询请求相关的业务数据未命中,直接穿透到数据库上。
可能导致的问题:同上。
测试方案设计:设计事务不会查询到缓存数据,再进行高并发请求,持续时间2分钟即可。
c. 缓存击穿:单点缓存数据失效导致大量请求直接落地到数据库上。
测试方案设计:提炼当前业务场景存在的缓存失效情况,再模拟缓存失效场景,针对失效的数据进行高并发请求。
测试工具
根据测试目标和测试环境,选择合适的性能测试工具。常见的性能测试工具包括 JMeter、LoadRunner、Gatling 等。
JMeter:适用于对功能要求较高、需要进行复杂测试场景配置的项目,尤其是对非 Web 应用(如数据库、消息队列等)的性能测试。
Locust:适合快速迭代的开发环境,测试人员可以快速编写和修改测试脚本,对 Web 应用进行性能测试和压力测试。同时,对于需要模拟大规模并发用户的场景,Locust 的分布式测试能力也可以支持。
五、设计测试用例
测试用例是性能测试的具体执行步骤,需要根据测试内容及选定的测试策略来进行设计。每条测试用例需要明确:
测试对象
用例名称
前置准备
操作步骤
预期值
预期值定义方法:
1.并发数:
如果需求方可以提供线上运行的数据(用户量)进行参考,我们可以根据线上数据进行事务处理峰值的计算,把采集到的数据基于二八原则计算出峰值时的数据,精确到秒级计算出结果再向上取整作为并发数的预期值。
如果没有可参考的数据,一般我们会选型压力测试方案逐步加压的方式来发现服务瓶颈问题,比方说50 100 200 300这样阶梯式的并发数来进行性能测试。
2.资源利用率:
80%依据:>80%时遇到高并发处理情况会存在CPU使用率的波动,可能会一下达到99.99%的使用率,所定的80%是线上使用率的告警阈值,可以前置处理高使用率的问题。
3.平均响应时间
一般无法直接给出具体的预期值,但如果团队中有定义慢响应的指标数据,比方说我们团队会把>3s响应时间的接口归纳在存在慢响应的风险问题,如果没有明确的预期值我们会直接使用这个指标。
4.事务失败率
<0.01%,所有的事务失败我们都需要进行问题定位。
5.吞吐量
可复用上一个版本的吞吐量数据作为预期值,没有可参考数据的话不需要定义期望值。
六、需要的测试资源
搭建测试环境需要的应用服务器、数据库服务器、压力机等资源,需要确保测试环境与生产环境尽可能接近。
评论区