前置知识: 软件测试

JMeter

4 minIntermediate2026/6/14

JMeter性能测试工具:测试计划、线程组、采样器、监听器与分布式测试详解。

1. JMeter 概述

1.1 什么是 JMeter

Apache JMeter 是开源的负载测试和性能测量工具,支持多种协议和应用型。

1.2 支持协议

协议描述
HTTP/HTTPSWeb 应用
FTP文件传输
JDBC数据库
JMS消息队列
SOAP/RESTWeb 服务
TCP原始 TCP
SMTP邮件

1.3 核心概念

概念描述
Test Plan测试计划(顶层)
Thread Group线程组(模拟用户)
Sampler采样器(发送请求)
Listener监听器(收集结果)
Configuration配置元件
Pre-Processor前置处理器
Post-Processor后置处理器
Assertion断言
Timer定时器

2. 测试计划结构

Test Plan
├── Thread Group
│   ├── HTTP Request Defaults (配置)
│   ├── CSV Data Set Config (数据)
│   ├── HTTP Cookie Manager (Cookie)
│   ├── HTTP Request (采样器)
│   │   ├── JSON Path Extractor (后置)
│   │   └── Response Assertion (断言)
│   ├── HTTP Request (采样器2)
│   ├── Constant Timer (定时器)
│   └── View Results Tree (监听器)
├── Summary Report
└── Aggregate Report

3. 线程组配置

3.1 基本线程组

参数描述
线程数模拟用户数
Ramp-Up启动所有线程的时间(秒)
循环次数重复执行次数

示例:100 用户,10 秒启动,循环 5 次

线程数: 100
Ramp-Up: 10
循环次数: 5

3.2 Stepping Thread Group

逐步增加负载:

初始: 10 用户
每 30 秒增加: 20 用户
最大: 200 用户
持续: 60 秒
逐步减少

4. 采样器

4.1 HTTP 请求

参数描述
服务器名称目标主机
端口目标端口
路径URL 路径
方法GET/POST/PUT/DELETE
参数请求参数
Body Data请求体

4.2 变量与参数化

用户定义变量

变量名
base_urlapi.example.com
port443
protocolhttps

CSV 数据文件

username,password
user1,pass1
user2,pass2
user3,pass3

4.3 JSON 提取

# 从响应中提取 Token
JSON Path: $.token
变量名: auth_token

# 后续请求使用
Header: Authorization: Bearer ${auth_token}

5. 断言

5.1 响应断言

描述
响应码200, 404 等
响应文本包含/匹配/等于
响应头检查头信息
响应时间< 2000ms

5.2 JSON 断言

Assert JSON Path: $.status
Expected Value: success

6. 监听器

6.1 常用监听器

监听器描述
View Results Tree查看每个请求详情
Summary Report汇总报告
Aggregate Report聚合报告
Response Times Graph响应时间
HTML ReportHTML 报告

6.2 关键指标

指标描述
Samples采样数
Average平均响应时间
Median中位数
90% Line90 百分位
99% Line99 百分位
Min/Max最小/最大
Error%错误率
Throughput吞吐量 (QPS)

7. 分布式测试

7.1 架构

Master (控制端)
  ├── Slave 1 (执行端)
  ├── Slave 2 (执行端)
  └── Slave 3 (执行端)

7.2 配置步骤

# Slave 端启动
jmeter-server -Djava.rmi.server.hostname=slave-ip

# Master 瑞执行
jmeter -n -t test_plan.jmx -R slave1,slave2,slave3 -l results.jtl

8. CLI 模式

# 非GUI模式执行
jmeter -n -t test_plan.jmx -l results.jtl -e -o report/

# 参数化
jmeter -n -t test_plan.jmx \
  -Jusers=100 \
  -Jrampup=10 \
  -Jduration=300 \
  -l results.jtl

# 生成 HTML 报告
jmeter -g results.jtl -o html-report/

9. 最佳实践

实践描述
CLI 模式性能测试不用 GUI
参数化变量替代硬编码
思考时间模拟真实用户
断言验证响应正确性
逐步加压避免突发流量
监控服务端同时监控服务器资源
多次运行取平均值
清理数据测试前清理