侧边栏壁纸
  • 累计撰写 31 篇文章
  • 累计创建 14 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

如何编写一份性能测试方案?

AllyTester
2025-02-07 / 0 评论 / 0 点赞 / 33 阅读 / 0 字

性能测试是保障系统在高并发、大数据量等复杂场景下能稳定、高效运行的关键测试手段,能提前发现并解决问题、优化资源配置,帮助企业节省成本、降低风险。一份有效的性能测试方案则是性能测试工作顺利开展的基础,本文主要介绍“如何编写一份性能测试方案”。

一、明确项目背景

  • 项目类型

  • 版本

  • 面向用户对象

  • 提供核心能力

二、明确测试目标

常见的性能测试目标:

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.吞吐量

可复用上一个版本的吞吐量数据作为预期值,没有可参考数据的话不需要定义期望值。

六、需要的测试资源

搭建测试环境需要的应用服务器、数据库服务器、压力机等资源,需要确保测试环境与生产环境尽可能接近。

0

评论区