Skip to content

性能测试 ​

性能测试是评估系统性能指标的重要手段,通过压力测试、负载测试等方式,发现系统性能瓶颈,为性能优化提供依据。

📋 性能测试类型 ​

🎯 性能测试指标 ​

1. 响应时间指标 ​

指标定义:

  • 平均响应时间:所有请求的平均响应时间
  • P50响应时间:50%的请求响应时间
  • P95响应时间:95%的请求响应时间
  • P99响应时间:99%的请求响应时间
  • 最大响应时间:最慢请求的响应时间

参考标准:

接口类型平均响应时间P95响应时间P99响应时间
查询接口< 100ms< 200ms< 500ms
写入接口< 200ms< 500ms< 1000ms
批量接口< 1000ms< 2000ms< 5000ms

2. 吞吐量指标 ​

指标定义:

  • TPS(Transactions Per Second):每秒事务数
  • QPS(Queries Per Second):每秒查询数
  • RPS(Requests Per Second):每秒请求数

计算公式:

TPS = 总事务数 / 测试时间
QPS = 总查询数 / 测试时间
RPS = 总请求数 / 测试时间

3. 并发指标 ​

指标定义:

  • 并发用户数:同时在线用户数
  • 并发请求数:同时处理的请求数
  • 峰值并发:系统能够承受的最大并发数

4. 资源利用率指标 ​

系统资源:

  • CPU使用率:CPU使用百分比
  • 内存使用率:内存使用百分比
  • 磁盘I/O:磁盘读写速率
  • 网络带宽:网络流量大小

参考标准:

资源类型正常范围告警阈值危险阈值
CPU使用率< 70%70-85%> 85%
内存使用率< 80%80-90%> 90%
磁盘I/O< 80%80-90%> 90%
网络带宽< 80%80-90%> 90%

🎯 性能测试工具 ​

1. JMeter ​

JMeter是Apache开源的性能测试工具,功能强大。

1.1 JMeter 测试计划 ​

测试计划结构:

1.2 JMeter 测试脚本 ​

基础测试脚本:

xml
<TestPlan version="1.2">
  <ThreadGroup>
    <stringProp name="ThreadGroup.num_threads">100</stringProp>
    <stringProp name="ThreadGroup.ramp_time">10</stringProp>
    <stringProp name="ThreadGroup.duration">60</stringProp>
    
    <HTTPSamplerProxy>
      <stringProp name="HTTPSampler.domain">api.example.com</stringProp>
      <stringProp name="HTTPSampler.path">/api/v1/users</stringProp>
      <stringProp name="HTTPSampler.method">GET</stringProp>
    </HTTPSamplerProxy>
    
    <ResponseAssertion>
      <stringProp name="Assertion.test_type">16</stringProp>
      <stringProp name="Assertion.response_code">200</stringProp>
    </ResponseAssertion>
  </ThreadGroup>
  
  <ResultCollector>
    <objProp>
      <name>filename</name>
      <value>/tmp/jmeter-results.jtl</value>
    </objProp>
  </ResultCollector>
</TestPlan>

1.3 JMeter 性能测试场景 ​

场景1:负载测试

bash
# 运行负载测试
jmeter -n -t test-plan.jmx -l results.jtl

# 查看结果
jmeter -g results.jtl -o report/

场景2:压力测试

  • 逐步增加并发用户数
  • 观察系统性能变化
  • 找出系统性能极限

场景3:稳定性测试

  • 长时间运行测试
  • 观察系统稳定性
  • 检测内存泄漏

参考资源:

2. Gatling ​

Gatling是基于Scala的高性能负载测试工具。

特点:

  • 高性能:比JMeter性能更高
  • DSL语法:使用Scala DSL编写测试脚本
  • 详细报告:生成详细的HTML报告

测试脚本示例:

scala
class UserApiSimulation extends Simulation {
  val httpProtocol = http
    .baseUrl("https://api.example.com")
    .acceptHeader("application/json")
  
  val scn = scenario("User API Test")
    .exec(http("Get User")
      .get("/api/v1/users/1")
      .check(status.is(200)))
    .pause(1)
    .exec(http("Create User")
      .post("/api/v1/users")
      .body(StringBody("""{"name":"John","email":"john@example.com"}"""))
      .check(status.is(201)))
  
  setUp(
    scn.inject(
      rampUsers(100) during (10 seconds),
      constantUsersPerSec(10) during (60 seconds)
    )
  ).protocols(httpProtocol)
}

参考资源:

3. K6 ​

K6是现代化的性能测试工具,使用JavaScript编写测试脚本。

特点:

  • 现代化:使用ES6+语法
  • 云原生:支持容器化部署
  • 实时监控:支持实时监控指标

测试脚本示例:

javascript
import http from 'k6/http';
import { check, sleep } from 'k6';

export let options = {
  stages: [
    { duration: '10s', target: 100 },
    { duration: '1m', target: 100 },
    { duration: '10s', target: 0 },
  ],
};

export default function () {
  let res = http.get('https://api.example.com/api/v1/users/1');
  check(res, {
    'status is 200': (r) => r.status === 200,
    'response time < 200ms': (r) => r.timings.duration < 200,
  });
  sleep(1);
}

参考资源:

📋 性能测试流程 ​

1. 测试准备 ​

准备步骤:

  1. 明确测试目标:确定要测试的性能指标
  2. 准备测试环境:搭建测试环境
  3. 准备测试数据:准备测试数据
  4. 编写测试脚本:编写性能测试脚本

2. 执行测试 ​

执行步骤:

  1. 基准测试:测试系统基准性能
  2. 负载测试:逐步增加负载
  3. 压力测试:测试系统极限
  4. 稳定性测试:长时间运行测试

3. 结果分析 ​

分析内容:

  1. 性能指标分析:分析响应时间、吞吐量等指标
  2. 瓶颈定位:定位性能瓶颈
  3. 问题分析:分析性能问题原因
  4. 优化建议:提出性能优化建议

4. 性能调优 ​

调优步骤:

  1. 代码优化:优化代码逻辑
  2. 配置优化:优化系统配置
  3. 架构优化:优化系统架构
  4. 验证效果:验证优化效果

📋 性能测试最佳实践 ​

1. 测试环境 ​

环境要求:

  • 与生产环境一致:测试环境应尽可能接近生产环境
  • 独立环境:测试环境应独立,不影响其他环境
  • 可重现性:测试环境应可重现

2. 测试数据 ​

数据准备:

  • 真实数据:使用真实或接近真实的数据
  • 数据量充足:准备足够的数据量
  • 数据多样性:准备多样化的测试数据

3. 测试场景 ​

场景设计:

  • 真实场景:模拟真实用户行为
  • 典型场景:测试典型业务场景
  • 极端场景:测试极端情况

4. 结果分析 ​

分析方法:

  • 多维度分析:从多个维度分析结果
  • 对比分析:与基准结果对比
  • 趋势分析:分析性能趋势

📖 学习资源 ​

视频教程 ​

书籍推荐 ​

  • 《性能测试实战》 - 专门讲解性能测试
  • 《JMeter性能测试实战》 - JMeter使用指南
  • 《软件性能测试过程详解与案例剖析》 - 性能测试方法和案例
  • 《高性能网站建设指南》 - 网站性能优化

网站资源 ​

工具推荐 ​

  • 性能测试工具:JMeter、Gatling、K6、Locust
  • 监控工具:Prometheus、Grafana、New Relic
  • 分析工具:JProfiler、VisualVM、Arthas

✅ 性能测试检查清单 ​

  • [ ] 性能测试计划已制定
  • [ ] 测试环境已准备
  • [ ] 测试脚本已编写
  • [ ] 性能测试已执行
  • [ ] 测试结果已分析
  • [ ] 性能瓶颈已定位
  • [ ] 优化方案已制定
  • [ ] 优化效果已验证

上一章节:接口测试
下一章节:CI/CD 集成
返回目录:工程架构能力