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后,按照以下步骤搭建基础骨架:

  1. 新建测试计划:点击菜单栏 File → New,或直接点击工具栏“新建”图标。默认生成一个名为“Test Plan”的根节点。
  2. 重命名测试计划:选中“Test Plan”,在右侧面板的“Name”输入框中修改为 第4章-第一个压测计划。
  3. 添加线程组:右键点击测试计划节点 → Add → Threads (Users) → Thread Group。
  4. 配置线程组参数:选中线程组,在右侧面板配置以下关键参数:
参数 本练习值 说明
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 添加监听器并运行

为查看运行结果,需要添加至少一个监听器。本练习同时添加“查看结果树”和“聚合报告”,分别用于调试和指标统计。

  1. 添加查看结果树:右键点击线程组 → Add → Listener → View Results Tree。
  2. 添加聚合报告:右键点击线程组 → Add → Listener → Aggregate Report。
  3. 运行测试:点击工具栏绿色“启动”按钮(▶),或使用快捷键 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章) 测试计划 线程组 (5用户, 2循环) HTTP请求默认值 HTTP请求 (GET /api/health) 查看结果树 + 聚合报告 数据流与执行顺序 ① 线程组启动5个虚拟用户,每个用户按Ramp-Up时间逐步激活 ② 每个用户循环2次,每次执行HTTP请求取样器 ③ HTTP请求自动继承默认值中的域名、端口、超时配置 ④ 请求结果实时写入查看结果树,测试结束后聚合报告输出统计 ✅ 本模板可直接复用:替换域名、Path、线程数即可用于其他接口压测

4.7 运行结果验证与常见问题

运行完成后,重点检查以下内容:

  • 查看结果树:展开任意一个取样结果,确认“Response code”为 200,“Response message”为 OK。如果出现 Non HTTP response code: org.apache.http.conn.HttpHostConnectException,说明目标服务不可达,请检查域名和端口配置。
  • 聚合报告:观察“Error %”是否为0%。如果出现错误,双击查看结果树中的失败请求,查看“Response data”中的错误详情。
  • 请求数验证:聚合报告中“# Samples”应等于 线程数 × 循环次数。本练习应为10。如果数量不符,检查线程组是否被禁用或测试计划是否被误修改。