定义

压力测试是一种非功能测试,用来评估系统在高负载、极端压力下的表现。它的目的是让系统不能正常工作,压垮它,看看会在哪里坏、怎么坏、坏得是否优雅。

压力测试=把系统压到极致,观察性能瓶颈和系统崩溃点。

压力测试和性能测试的关系

测试类型 目的
性能测试 测试正常负载下的性能(响应时间、TPS、QPS、吞吐量)
负载测试 测试逐步增加负载时间时系统何时达到最大并发
压力测试 超过最大负载后继续加压,直到崩溃
稳定性/耐久测试 长时间运行系统,观察是否泄露、积累错误

压力测试是性能测试的一种,属于极限破坏类测试。

压力测试的目的

  1. 找出系统性能瓶颈(CPU、内存、数据库、IO、网络)
  2. 找出系统最大承载能力上限
  3. 观察系统在高压下的:稳定性、可用性、恢复能力
  4. 发现潜在的:死锁、内存泄漏、线程池耗尽、数据库连接耗尽、队列积压、超时、错误率上升

压力测试流程

  1. 确定测压目标
  2. 确定压测指标
  3. 编写压测脚本
  4. 准备测压环境
  5. 执行压力测试:超过负载逐步加压,直到系统出现明显异常
  6. 记录日志和监控
  7. 分析瓶颈并优化
  8. 重新测压验证优化效果

压力测试中的关键指标

  • 性能指标
    • QPS(每秒查询数)
    • TPS(每秒事务数)
    • RT(响应时间)
    • 吞吐量(MB/s)
  • 资源指标
    • CPU、内存(Heap/Non-Heap)
    • 磁盘IO
    • 网络带宽
    • 线程数/线程池状态
    • GC次数/停顿时间(Java)
  • 系统指标
    • 错误率(Error%)
    • 超时率
    • 成功率