JMeter 并发测试完整教程
本教程将涵盖以下内容:

- 准备工作:安装和配置 JMeter。
- 核心概念:理解线程组、控制器、元件等基本概念。
- 实战步骤:创建一个完整的并发测试计划,以一个简单的登录接口为例。
- 高级配置:参数化、断言、关联、结果分析。
- 最佳实践与注意事项:如何生成专业的测试报告。
第一部分:准备工作
下载与安装
- 下载:访问 Apache JMeter 官网 下载最新版本的 Binary Zip 包。
- 安装:
- 解压下载的 ZIP 文件到你想要的目录(
D:\apache-jmeter-5.6)。 - 重要:JMeter 是绿色软件,无需安装,解压即可使用。
- 解压下载的 ZIP 文件到你想要的目录(
- 环境变量(可选但推荐):
- 将 JMeter 的
bin目录(D:\apache-jmeter-5.6\bin)添加到系统的PATH环境变量中,这样你就可以在任何位置通过命令行启动 JMeter。
- 将 JMeter 的
启动 JMeter
- 图形界面启动:
- 进入 JMeter 的
bin目录,双击jmeter.bat(Windows) 或在终端运行./jmeter.sh(macOS/Linux)。 - 启动后,你会看到一个空的 JMeter 界面。
- 进入 JMeter 的
第二部分:核心概念
在开始创建测试计划前,你需要了解 JMeter 的几个核心组件,它们就像搭积木一样,共同构成了你的测试计划。
- 测试计划:这是你所有测试的顶层容器,一个 JMeter 文件就是一个测试计划。
- 线程组:这是负载测试的核心,它定义了你的并发用户如何行为。
- 线程数:模拟的虚拟用户数量,设置为 100,就表示 100 个用户并发。
- Ramp-Up Period (秒):所有虚拟用户启动所需的时间,线程数=100,Ramp-Up=10,表示 JMeter 会在 10 秒内均匀地启动这 100 个用户,每秒钟启动 10 个用户,如果设置为 0,则所有用户会瞬间同时启动。
- 循环次数:每个线程重复执行测试计划的次数,设置为 1 表示每个用户只执行一次;设置为 100 表示每个用户执行 100 次,勾选“永远”则会无限循环。
- 控制器:决定请求的执行逻辑。
- 逻辑控制器:控制其下元件的执行顺序或逻辑,如
循环控制器、如果控制器、事务控制器。 - 采样器:发出一个请求,向服务器发送数据,这是测试的“动作”。
HTTP请求、JDBC请求。
- 逻辑控制器:控制其下元件的执行顺序或逻辑,如
- 配置元件:配置采样器需要的数据,通常在采样器之前执行。
- HTTP请求默认值:设置通用的 HTTP 请求参数,如服务器名称/IP、端口、协议,避免在每个请求中重复填写。
- 用户定义的变量:定义全局变量,如环境、URL 等。
- CSV 数据集配置:从 CSV 文件中读取数据,用于参数化。
- 监听器:收集、展示和保存测试结果。
- 查看结果树:可以查看每个请求的详细请求和响应信息,非常利于调试,但性能开销大,生产环境测试时建议关闭。
- 聚合报告:最重要的报告之一,展示吞吐量、平均响应时间、错误率等关键指标。
- 图形结果:以图表形式展示响应时间分布。
- 用例结果:以表格形式展示每个请求的详细信息。
第三部分:实战步骤 - 创建第一个并发测试
假设我们要对一个用户登录接口进行并发测试,接口信息如下:
- URL:
http://example.com/api/login - 方法:
POST - 参数:
username和password
步骤 1:创建测试计划
- 启动 JMeter。
- 在左侧的 "测试计划" 上右键,选择
添加->Threads (Users)->线程组。
步骤 2:配置线程组
- 在右侧的 "线程组" 面板中,进行如下配置:
- 线程数:
50(模拟 50 个并发用户) - Ramp-Up Period (秒):
5(5 秒内启动完所有 50 个用户) - 循环次数:
1(每个用户只登录一次)
- 线程数:
步骤 3:添加 HTTP 请求默认值
为了避免在每个请求中都输入服务器地址,我们可以使用默认值。
- 在 "测试计划" 或 "线程组" 上右键,选择
添加->Config Element->HTTP请求默认值。 - 在右侧面板配置:
- 服务器名称或 IP:
example.com - 协议:
http - 端口:
80(HTTP 默认端口)
- 服务器名称或 IP:
步骤 4:添加 HTTP 请求采样器
现在添加具体的登录请求。

- 在 "线程组" 上右键,选择
添加->Sampler->HTTP请求。 - 在右侧面板配置:
- 路径:
/api/login(因为服务器名已在默认值中配置) - 方法:
POST - Body Data:
username=testuser&password=123456(这是 POST 请求的参数)
- 路径:
步骤 5:添加监听器查看结果
为了看到测试结果,我们需要添加监听器。
- 在 "线程组" 上右键,选择
添加->Listener->聚合报告。 - 再次右键,选择
添加->Listener->查看结果树(调试用)。
步骤 6:保存与运行
- 点击菜单栏的
文件->保存测试计划...,将你的计划保存为Login_Test.jmx。 - 点击工具栏上的 启动 按钮(绿色三角形)开始执行测试。
步骤 7:查看分析结果
测试运行完毕后,查看监听器中的数据。
-
聚合报告:这是最重要的分析窗口。
- 样本:总请求数量。
- 平均:平均响应时间。
- 吞吐量:系统每秒能处理的请求数,这是衡量系统性能的关键指标。
- 错误 %:请求失败的百分比,如果这个值不为 0,说明系统在高并发下可能存在问题。
-
查看结果树:可以点击 "请求" 或 "响应" 标签页,查看具体的 HTTP 请求内容和服务器返回的详细信息,方便定位问题。
第四部分:高级配置
参数化 - 使用 CSV 文件
真实场景中,用户名和密码应该是不同的,我们可以使用 CSV 文件来参数化。
- 准备 CSV 文件:创建一个
users.csv文件,内容如下:username,password user1,pass1 user2,pass2 user3,pass3 ...
- 添加 CSV 数据集配置:
- 在 "线程组" 上右键,
添加->Config Element->CSV 数据集配置。 - 文件名: 填写你的
users.csv的绝对路径或相对路径(推荐将 CSV 文件放在 JMeter 的bin目录下,然后只写文件名)。 - 变量名:
username,password(与 CSV 文件的列名一致)。
- 在 "线程组" 上右键,
- 修改 HTTP 请求:
- 在 "HTTP 请求" 的 "Body Data" 中,将原来的值替换为 JMeter 变量:
username=${username}&password=${password}
- 在 "HTTP 请求" 的 "Body Data" 中,将原来的值替换为 JMeter 变量:
每个用户在登录时都会从 CSV 文件中读取不同的用户名和密码。
关联 - 处理动态数据
很多应用(如电商、社交)的接口会返回动态数据(如 Session ID, Token),后续请求需要用到这些数据,这需要通过“关联”来实现。
- 示例:登录成功后,服务器返回的 JSON 中包含一个
token,后续的 API 请求需要在 Header 中带上这个token。
- 在登录请求的响应中提取 Token:
- 在 "登录" HTTP 请求之后,添加一个
后置处理器->JSON 提取器。 - 变量名:
auth_token - JSON 路径表达式:
$.data.token(根据实际返回的 JSON 结构填写)
- 在 "登录" HTTP 请求之后,添加一个
- 在后续请求中使用 Token:
- 添加一个新的 "HTTP 请求"(获取用户信息)。
- 在该请求的
HTTP 信息头管理器中(需要先添加这个元件),添加一个头:- 名称:
Authorization - 值:
Bearer ${auth_token}
- 名称:
命令行运行 (非 GUI 模式)
当并发用户数很大时(如 1000+),JMeter 的 GUI 模式会消耗大量资源,影响测试准确性,推荐使用非 GUI 模式在服务器上运行。
-
生成 JMeter 命令行脚本:
- 在 JMeter GUI 中,点击
文件->生成 JMeter 命令行脚本...。 - 保存为
test_commands.cmd(Windows) 或test_commands.sh(Linux/macOS)。
- 在 JMeter GUI 中,点击
-
执行脚本:
-
打开命令行,切换到 JMeter 的
bin目录。 -
运行生成的脚本:
# Windows test_commands.cmd # Linux/macOS ./test_commands.sh
-
常用参数:
-n: 非 GUI 模式-t: 指定测试计划文件路径-l: 指定结果日志文件路径(如results.jtl)-e: 在测试结束后生成一个 HTML 格式的测试报告-o: 指定生成报告的输出目录
手动命令示例:
jmeter -n -t D:/tests/Login_Test.jmx -l D:/results/results.jtl -e -o D:/results/report
运行后,
D:/results/report目录下会生成一个可以直接在浏览器中打开的 HTML 报告。 -
第五部分:最佳实践与注意事项
- 先做单用户测试:在并发测试前,先用 1-2 个用户跑通整个业务流程,确保所有请求、参数、关联都正确。
- 合理设置 Ramp-Up:Ramp-Up 时间不宜过短,避免瞬间对服务器造成巨大冲击;也不宜过长,导致测试不真实,通常建议 Ramp-Up 时间 = 线程数 / 10 (根据服务器性能调整)。
- 监控服务器资源:JMeter 只能模拟用户行为,不能告诉你服务器为什么性能瓶颈,必须同时监控服务器的 CPU、内存、磁盘 I/O、网络 使用情况,可以使用
top(Linux),Task Manager(Windows) 或专业的监控工具如 Prometheus + Grafana。 - 关注错误率:错误率是衡量系统稳定性的关键,如果错误率上升,需要结合服务器日志和 JMeter 的“查看结果树”来分析原因。
- 使用非 GUI 模式:对于任何负载测试,尤其是生产环境的预演,务必使用
-n命令行模式运行。 - 测试环境独立:确保你的测试环境与生产环境隔离,避免测试流量影响真实用户。
- 测试计划清晰:给测试计划、线程组、请求等元件起一个有意义的名字,方便管理和维护。
通过以上步骤,你已经掌握了使用 JMeter 进行并发测试的全过程,从简单的请求到复杂的业务流程,再到专业的性能分析,JMeter 是一个强大而灵活的工具,多加练习,你就能成为一名出色的性能测试工程师。
