性能测试单场景测试时,是设置并发读多个文件,还是设置不同的用户读不同的文件?

两种场景的核心区别

这两种设计的根本区别在于 测试的出发点和所要验证的系统瓶颈侧重点不同

特性 场景一:并发读多个不同单据 场景二:不同用户读不同的单据
核心描述 更侧重于 "单据"本身 作为系统资源的承载能力。 更侧重于 "用户" 在系统内的操作行为以及系统对用户会话和权限的处理能力。
数据维度 单据ID 是核心变量。系统需要处理大量不同的单据数据。 用户凭证(Token/Session)单据ID 都是核心变量。
缓存友好性 不友好。由于每次请求的单据ID都不同,很可能每次都会穿透缓存,直接访问数据库,对数据库造成巨大压力。 相对友好。虽然用户和单据都在变,但单个用户可能重复查看某张单据,或者系统对热门单据有缓存,可以测试缓存在多用户下的表现。
主要压力点 数据库 (查询、连接池)、后端服务(数据处理逻辑)。 应用服务器 (用户会话管理、权限验证)、缓存数据库
模拟的真实情况 系统内所有用户都在查看完全不同的单据(例如:大促时,每个顾客看的商品详情页都不同)。 系统内多个用户各自 的权限范围内,查看自己相关的单据(例如:一个ERP系统,张三看A订单,李四看B订单,王五也看A订单)。

测试重点是什么?

尽管侧重点不同,但两者共享一些核心的测试重点,只是优先级和关注点略有差异。

共同的测试重点
  1. 响应时间

    • 这是最直观的指标。在并发下,查看单据详情页的API接口的平均响应时间、90%分位值、95%分位值 是否在可接受范围内(如:200ms以内)。

    • 重点关注高并发时,响应时间是否平稳,还是会急剧上升。

  2. 吞吐量

    • 系统在单位时间内(如:每秒)能成功处理多少個"查看单据"的请求。这是衡量系统处理能力的核心指标。
  3. 错误率

    • 在并发压力下,请求是否会出现错误?例如:5xx服务器错误、4xx客户端错误(如因资源竞争导致的锁超时)、超时等。错误率需要控制在极低水平(如<0.1%)。
  4. 系统资源消耗

    • CPU使用率:应用服务器和数据库服务器的CPU是否成为瓶颈。

    • 内存使用率:检查是否有内存泄漏或内存占用过高的情况。

    • 磁盘I/O:数据库的读写IOPS和延迟。

    • 网络带宽:网络是否成为瓶颈。

场景一特有或重点关注的测试点
  1. 数据库压力

    • SQL查询效率 :由于单据ID不同,每次查询可能都是新的SQL执行。需要关注数据库的QPS 以及慢查询日志。

    • 数据库连接池:大量的并发查询会迅速占满数据库连接池,需要监控连接池的使用情况,是否出现"等待获取连接"的超时。

    • 锁竞争:虽然"读"操作通常共享锁,但如果单据数据涉及关联表或复杂查询,仍可能引发锁等待。

  2. 缓存穿透与击穿

    • 这是本场景的核心风险点。因为每个请求的单据都不同,缓存可能无法命中,导致所有请求都直接落到数据库上,引发"缓存穿透"。

    • 如果恰好在缓存失效的瞬间有大量并发请求访问同一个单据,则会发生"缓存击穿"。

    • 测试重点:验证系统是否有应对缓存穿透/击穿的策略(如:布隆过滤器、缓存空对象、互斥锁等)。

  3. 后端服务处理能力

    • 验证后端服务从数据库获取到数据后,进行数据组装、业务逻辑处理的性能极限。
场景二特有或重点关注的测试点
  1. 用户会话与认证授权

    • 会话管理:系统需要为每个并发用户维持一个会话(Session)。这会对应用服务器的内存和Session存储机制(如Redis)造成压力。

    • 权限验证:每次请求都需要验证当前用户是否有权限查看该单据。这个权限校验逻辑(如查询用户-角色-权限表)的性能至关重要,可能成为瓶颈。

  2. 缓存效率

    • 测试在真实的多用户环境下,缓存的命中率如何。例如,如果多个用户查看同一张单据,系统是否能有效地利用缓存,减轻数据库压力。
  3. 数据隔离性

    • 验证系统是否能严格保证用户A无法通过任何方式(如修改ID)查看到用户B的单据。这虽然是功能测试点,但在性能压力下,也需要确保权限校验逻辑不会出错。
  4. 负载均衡

    • 多个用户的请求会被负载均衡到不同的应用服务器上。需要测试在这种"用户分散"的模式下,集群的处理能力是否线性增长。

总结与建议

场景 设计目的 关键挑战 推荐测试策略
并发读多个不同单据 探测系统极限,寻找瓶颈。尤其关注数据库和缓存机制在最坏情况下的表现。 缓存穿透、数据库连接池瓶颈、慢查询。 1. 准备海量的测试单据数据。 2. 使用工具(如JMeter)循环或随机读取不同的单据ID。 3. 重点监控数据库的各项指标。
不同用户读不同的单据 模拟真实用户行为,验证系统在真实场景下的稳定性 用户会话管理、权限校验性能、缓存命中率。 1. 准备一批测试用户和与之关联的单据数据。 2. 在测试脚本中实现用户登录->获取Token->带着Token查询关联单据 的完整流程。 3. 重点监控应用服务器缓存(如Redis)的性能。

最佳实践 :在实际项目中,建议两种场景都进行测试

  • 首先进行 场景一(极限压力测试),找到系统的绝对瓶颈和崩溃点。

  • 然后进行 场景二(负载测试/压力测试),用更贴近生产的环境模型,验证系统在预期用户量下的表现是否达标。

通过这两种不同维度的测试,你可以对"单据详情页"这个功能的性能有一个全面而立体的了解。

相关推荐
熙客2 小时前
TiDB:分布式关系型数据库
java·数据库·分布式·tidb
你想考研啊5 小时前
oracle导出 导入
数据库·oracle
韩立学长7 小时前
基于Springboot的旧时月历史论坛4099k6s9(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
TDengine (老段)8 小时前
TDengine 字符串函数 CONCAT_WS 用户手册
android·大数据·数据库·时序数据库·tdengine·涛思数据
IT 小阿姨(数据库)8 小时前
PostgreSQL 之上的开源时序数据库 TimescaleDB 详解
运维·数据库·sql·postgresql·开源·centos·时序数据库
熊文豪9 小时前
openEuler 云原生实战:部署高性能 Redis 集群与压测分析
数据库·redis·云原生·openeuler
GTgiantech9 小时前
科普SFP 封装光模块教程
服务器·网络·数据库
深圳市恒讯科技10 小时前
如何在服务器上安装和配置数据库(如MySQL)?
服务器·数据库·mysql
言之。10 小时前
TiDB分布式数据库技术架构概述
数据库·分布式·tidb
万事大吉CC10 小时前
SQL表设计与约束教程
数据库·sql