Java程序性能测试过程001-基础知识点


前置说明

前段时间对公司区块链程序进行了一次比较全面性能测试,并从中发现了一些性能问题及修复方式,现在整理一下测试过程和一些基础知识点。

第1讲: 基础知识点

1.1 性能指标

测试指标:
QPS 每秒请求数
TPS 请求+处理+返回 (即系统每秒钟能够处理的业务数量),又叫throughput
RT 响应时间 (分为最小响应时间、最大响应时间、平均响应时间)
ERROR 错误率

 

观察指标:
CPU
内存
磁盘IO

 

计算公式:
并发数 = RPS * 响应时间
最大并发数=(单次响应时间 * 业务量)/总的业务时间

第2讲: 测试类型

2.1 基准测试 (Performance Benchmark Test)

2.1.1 概念

  1. 每次对外发布产品版本前必须要完成的测试类型
  2. 执行固定的性能测试场景得到系统的性能测试报告
  3. 与上一版本发布时的基准测试结果进行对比
  4. 优化 or 恶化 ?

2.1.2 测试目的

  1. 获取系统性能基准作为参照物
  2. 识别系统或环境的配置变更对性能带来的影响
  3. 给系统优化前后的性能提升/下降提供参考标准
  4. 观察系统的整体性能趋势与性能拐点,识别系统性能风险

2.1.3 基准评估

  1. 同一事务的响应时间变慢了
    如: 上一版本中,用户登录的响应时间是 2s,在最新的被测版本中这个响应时间变成了 4s;
  2. 系统资源的占用率变高了
    如: 上一版本中,平均 CPU 占用率是 15%,在最新的被测版本中平均 CPU 占用率变成了 30%;
  3. 等等…

2.2 负载测试

2.2.1 测试目的

  1. 持续稳定地增加系统的负载,测试系统性能的变化
  2. 找出指标阈值下的系统瓶颈和性能拐点
  3. 测试系统所能承受的最大负载量
  4. 找出内存管理错误,内存泄漏,缓冲区溢出的问题
  5. 找到处理极限,为调优提供数据
  6. 找出系统在稳定情况下的最大压力值

2.2.2 测试意义

通过改变负载方式、增加负载,发现系统中所存在的性能问题

2.2.3 实例

  1. 200 个并发用户访问时的最大响应时间,最大吞吐量
  2. 21 个小时内要处理 1000 笔业务,找到最大并发数
  3. 响应时间不超过 10s 的最大负载
  4. cpu 利用率不高于 60% 下的最大并发数

2.3 压力测试

2.3.1 测试目的

  1. 测试系统的资源在饱和状态下的应用的处理会话能力
  2. 持续稳定的增加系统压力,测试系统性能的变化
  3. 破坏性测试,确保系统失败并能正常恢复
  4. 发现系统稳定性的隐患和系统在负载峰值的条件下功能隐患
  5. 关注大业务量情况系统的长时间运行状态(例如反应变慢、内存泄漏 系统崩溃、失效恢复)
  6. 找出系统在可控错误率下的最大压力值

2.3.2 实例

  1. 长时间运行(7*24 小时)模拟被测系统的测试负载
  2. 观察系统在长期运行过程中是否有潜在的问题
  3. 对系统指标进行监控,发现长期运行时的内存泄漏、资源非法占用等问题

2.4 破坏性压力测试

2.4.1 实例1

  1. 不断加压,直至系统崩溃
  2. 测试系统的最大承受能力
  3. 通过破坏性加压的手段,快速造成系统的崩溃或让问题明显的暴露出来

2.4.2 实例2: 阶梯式压力测试

  1. 逐渐增加测试负载,如每 5s 钟增加 100 个并发数
  2. 高负载情况下持续运行一段时间,然后再逐渐降低负载
  3. 构成一个梯级的测试场景

2.5 Spike 测试

2.5.1 概念

尖峰测试(Spike testing)在性能测试中属于压力测试的一个子集。指的是在某一瞬间或者多个频次下用户数和压力陡然增加的场景。
为了验证我们的网站在访问用户急剧增加的情况下,或者短时间内反复急剧增加工作负载时能否正常工作;以及程序能否从高负荷中恢复并正常工作时常常用到这种测试手法。
Spike 在英文中是钉子的意思,或者我们可以将其称之为冲击测试,反复冲击服务器。

常见的场景有
12306 开始售票时访问用户急剧增加
网站公布高考成绩、录取分数时,访问用户急剧增加
网站投放商业促销广告和促销活动,如双 11 和 618 等活动开始时,访问用户急剧增加
等等。。。。

2.6 数据测试

2.6.1 实例

  1. 业务数据量不断增大,进行模拟测试
  2. 复杂业务、核心业务的测试

第3讲: 性能指标详解

3.1 TPS走势图

TPS走势图

a 点:性能期望值
b 点:高于期望值,系统资源处于临界点
c 点:高于期望值,拐点
d 点:超过最大负载,系统崩溃


从上述模型,将性能测试分为 3 种类型:

● 基准测试
原点到 a 之间的系统性能,指以系统预期性能指标为前提,对系统不断增加压力,以验证系统能否达到预期性能

● 负载测试
a 到 b 的系统性能,是指对系统不断地增加压力或一定压力下的持续运行,直到系统的某项或多项性能指标达到极限,例如某种资源已经达到饱和状态等

● 压力测试
b 到 d 之间的系统性能,是指超过安全负载的情况下,对系统不断施加压力,直到系统崩溃,找出系统的瓶颈点和崩溃点。

相关链接

  1. 参考: https://testerhome.com/topics/21318
  2. 测试报告: https://blog.csdn.net/yd_lisa/article/details/105530952
    https://www.zhihu.com/question/24248575

文章作者: Alex
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex !
  目录