4. 第一个测试计划:创建测试计划、添加线程组、配置HTTP请求默认值、运行与查看结果
本章是JMeter实战的起点。你将亲手创建第一个完整的测试计划,理解从“新建”到“运行查看”的全流程。我们会严格遵循容量压测的标准模板结构,确保后续所有复杂场景都能基于此模板快速扩展。
4.1 测试计划核心结构
一个标准的JMeter测试计划遵循“容器-配置-执行-监听”的层级关系。下表列出了本章将涉及的核心组件及其职责:
| 组件 | 类型 | 职责 | 数量 |
|---|---|---|---|
| 测试计划 (Test Plan) | 根容器 | 定义全局变量、运行模式、用户自定义变量 | 1个 |
| 线程组 (Thread Group) | 执行容器 | 模拟虚拟用户数、Ramp-Up时间、循环次数 | 至少1个 |
| HTTP请求默认值 | 配置元件 | 统一设置协议、域名、端口、编码等公共参数 | 0或1个 |
| HTTP请求 | 取样器 | 发送具体的HTTP请求(GET/POST等) | 至少1个 |
| 查看结果树 | 监听器 | 查看单个请求的请求/响应详情,用于调试 | 1个(调试用) |
| 聚合报告 | 监听器 | 统计吞吐量、平均响应时间、错误率等关键指标 | 1个(压测用) |
4.2 创建测试计划与线程组
打开JMeter GUI后,按照以下步骤搭建基础骨架:
- 新建测试计划:点击菜单栏
File → New,或直接点击工具栏“新建”图标。默认生成一个名为“Test Plan”的根节点。 - 重命名测试计划:选中“Test Plan”,在右侧面板的“Name”输入框中修改为
第4章-第一个压测计划。 - 添加线程组:右键点击测试计划节点 →
Add → Threads (Users) → Thread Group。 - 配置线程组参数:选中线程组,在右侧面板配置以下关键参数:
| 参数 | 本练习值 | 说明 |
|---|---|---|
| Number of Threads (users) | 5 | 模拟5个并发虚拟用户 |
| Ramp-Up Period (seconds) | 5 | 5秒内启动全部5个用户,即每秒启动1个 |
| Loop Count | 2 | 每个用户执行2次请求 |
| Same user on each iteration | 勾选 | 保持同一用户会话,便于测试Cookie/Session |
容量压测经验: 在正式压测中,Ramp-Up时间通常设置为“总线程数 / 每秒目标启动数”。例如目标1000线程、每秒启动100,则Ramp-Up=10秒。本练习使用5秒启动5线程,便于观察用户逐步加载的行为。
4.3 配置HTTP请求默认值
HTTP请求默认值是一个配置元件,它能为当前作用域内所有HTTP请求提供公共参数。当被测API的域名、端口、协议一致时,使用此元件可以大幅减少重复配置。
添加步骤:右键点击线程组 → Add → Config Element → HTTP Request Defaults。
配置以下参数(以练习环境为例):
| 字段 | 值 | 说明 |
|---|---|---|
| Protocol | https |
统一使用HTTPS协议 |
| Server Name or IP | api.example.com |
被测服务域名 |
| Port Number | 443 |
HTTPS默认端口 |
| Content-Type | application/json |
全局请求体格式 |
| Connect Timeout (ms) | 5000 |
连接超时5秒 |
| Response Timeout (ms) | 10000 |
响应超时10秒 |
常见错误: 初学者容易在HTTP请求中重复填写与默认值相同的域名和端口。如果默认值已配置,HTTP请求中应保持“Server Name or IP”和“Port Number”字段为空,否则取样器会优先使用自身配置,导致默认值失效。
4.4 添加HTTP请求取样器
在线程组下添加一个HTTP请求,用于发送具体的API调用:
- 右键点击线程组 →
Add → Sampler → HTTP Request。 - 名称:
GET /api/health - Implementation:保持默认
HttpClient4 - Method:
GET - Path:
/api/health - Parameters / Body Data:无需填写(GET请求无Body)
由于已在HTTP请求默认值中配置了协议、域名和端口,此处只需填写Path即可。JMeter会自动拼接完整URL:https://api.example.com:443/api/health。
4.5 添加监听器并运行
为查看运行结果,需要添加至少一个监听器。本练习同时添加“查看结果树”和“聚合报告”,分别用于调试和指标统计。
- 添加查看结果树:右键点击线程组 →
Add → Listener → View Results Tree。 - 添加聚合报告:右键点击线程组 →
Add → Listener → Aggregate Report。 - 运行测试:点击工具栏绿色“启动”按钮(▶),或使用快捷键
Ctrl + R。
运行过程中,查看结果树会实时显示每个请求的:
- Sampler result:响应码、响应消息、响应时间(毫秒)
- Request:实际发送的HTTP请求头、URL、参数
- Response data:服务器返回的原始响应体
聚合报告则在测试结束后汇总关键指标:
| 指标 | 本练习预期值 | 说明 |
|---|---|---|
| # Samples | 10 | 5用户 × 2循环 = 10次请求 |
| Average (ms) | 视网络情况 | 所有请求的平均响应时间 |
| Min / Max (ms) | 视网络情况 | 最小/最大响应时间 |
| Error % | 0% | 期望全部成功 |
| Throughput (req/s) | 视网络情况 | 每秒处理请求数 |
4.6 测试计划结构总览
下图展示了本章完成的测试计划完整结构,以及各组件之间的层级与数据流关系:
4.7 运行结果验证与常见问题
运行完成后,重点检查以下内容:
- 查看结果树:展开任意一个取样结果,确认“Response code”为
200,“Response message”为OK。如果出现Non HTTP response code: org.apache.http.conn.HttpHostConnectException,说明目标服务不可达,请检查域名和端口配置。 - 聚合报告:观察“Error %”是否为0%。如果出现错误,双击查看结果树中的失败请求,查看“Response data”中的错误详情。
- 请求数验证:聚合报告中“# Samples”应等于
线程数 × 循环次数。本练习应为10。如果数量不符,检查线程组是否被禁用或测试计划是否被误修改。