JMeter(一):jemter安装

JMeter(一):jemter安装

      • [前言:为什么 JMeter 是性能测试的首选工具?](#前言:为什么 JMeter 是性能测试的首选工具?)
    • 一、安装jmeter
      • [1. 环境准备:Windows/Mac 通用](#1. 环境准备:Windows/Mac 通用)
      • [2. 安装 JMeter(解压即用,无需安装包)](#2. 安装 JMeter(解压即用,无需安装包))
      • [3. 启动与界面设置(建议改成中文)](#3. 启动与界面设置(建议改成中文))
    • [二、 核心元件](#二、 核心元件)
      • [1. 测试计划(Test Plan)](#1. 测试计划(Test Plan))
      • [2. 线程组(Thread Group):模拟并发用户的核心](#2. 线程组(Thread Group):模拟并发用户的核心)
      • [3. 取样器(Sampler):发送请求的执行单元](#3. 取样器(Sampler):发送请求的执行单元)
      • [4. 配置元件:预设参数,简化脚本](#4. 配置元件:预设参数,简化脚本)
      • [5. 定时器:模拟真实用户的思考时间](#5. 定时器:模拟真实用户的思考时间)
      • [6. 断言:验证响应是否符合预期](#6. 断言:验证响应是否符合预期)
      • [7. 后置处理器:提取响应数据,实现关联](#7. 后置处理器:提取响应数据,实现关联)
      • [8. 监听器:收集并展示测试结果](#8. 监听器:收集并展示测试结果)
      • [9. 逻辑控制器:控制请求执行顺序](#9. 逻辑控制器:控制请求执行顺序)
    • 三、单接口配置
      • [1. 添加线程组](#1. 添加线程组)
      • [2. 添加HTTP请求](#2. 添加HTTP请求)
      • [3. 添加其他配置元件](#3. 添加其他配置元件)
    • 四、接口压测
      • [1. 分布式压测(模拟 10000 + 并发)](#1. 分布式压测(模拟 10000 + 并发))
      • [2. 阶梯加压(模拟真实流量增长)](#2. 阶梯加压(模拟真实流量增长))
      • [3. BeanShell 脚本:动态处理复杂逻辑](#3. BeanShell 脚本:动态处理复杂逻辑)
    • 五、常见问题分析
    • [六、JMeter 学习路径](#六、JMeter 学习路径)

前言:为什么 JMeter 是性能测试的首选工具?

在高并发场景下,"功能能用"≠"性能能用"------ 一个电商网站在 100 人访问时正常,1000 人访问就卡顿,本质是性能瓶颈未被发现。Apache JMeter 作为开源免费、跨平台、可扩展的性能测试工具,能精准模拟高并发场景,定位系统瓶颈,无论是 Web 应用、数据库还是接口测试,都能轻松应对。


一、安装jmeter

1. 环境准备:Windows/Mac 通用

JMeter 依赖 Java 环境,必须先装 JDK 再配 JMeter,适合已经安装java环境的用户

  • 版本要求:建议Java 17 或更高版本(JDK 8 虽兼容,但 有点老了)

  • 验证方法:终端输入以下命令,显示版本号即合格:

    java -version # 输出:java version "17.0.10"

    javac -version # 输出:javac 17.0.10(JDK特有,JRE无此命令)

2. 安装 JMeter(解压即用,无需安装包)

  1. 下载安装包 :官网地址https://jmeter.apache.org/download_jmeter.cgi,选择「Binaries」下的apache-jmeter-5.6.3.zip(最新稳定版)

  2. 解压配置

  • 解压到无空格路径(如D:\JMeter,避免后续脚本运行报错)

  • 目录结构说明(核心目录必知):

    bin/ # 启动脚本(jmeter.bat/jmeter.sh)+ 配置文件

    lib/ # 核心库文件,JDBC驱动需放此目录

    lib/ext/ # 插件目录(如阶梯加压插件放这里)

    docs/ # 官方文档

3. 启动与界面设置(建议改成中文)

(1) 启动方式

  • Windows:双击bin/jmeter.bat

  • Linux/Mac:终端进入 bin 目录,执行./jmeter

  • 启动优化 :修改bin/setenv.bat(Windows)或setenv.sh(Linux)配置 JVM 内存,避免压测时内存不足:

    # Windows示例:setenv.bat

    set HEAP=-Xms2G -Xmx4G # 初始堆2G,最大堆4G(根据电脑内存调整)

    set GC_ALGO=-XX:+UseZGC # 用ZGC垃圾回收器,减少卡顿

(2) 永久设置中文界面

  1. 打开bin/jmeter.properties文件

  2. 找到#language=en,修改为:

    language=zh_CN # 去掉#,下划线不能改

  3. 重启 JMeter,界面自动切换为中文


二、 核心元件

1. 测试计划(Test Plan)

  • 作用:所有元件的顶层容器,定义测试整体配置

  • 关键设置

    ✅ 勾选「独立运行每个线程组」:避免线程组互相干扰

    ✅ 取消勾选「函数测试模式」:减少响应数据存储,降低内存消耗

2. 线程组(Thread Group):模拟并发用户的核心

  • 作用:定义并发用户数、执行时长等负载参数

  • 常用类型

类型 用途 适用场景
普通线程组 常规压测 模拟稳定并发用户
setUp 线程组 测试前初始化 数据库连接、数据准备
tearDown 线程组 测试后清理 数据删除、连接关闭
  • 核心参数配置(电商下单场景示例):

    线程数(用户数):500 # 模拟500个并发用户

    Ramp-Up时间:60秒 # 60秒内逐步启动所有线程(避免瞬间冲击服务器)

    循环次数:Forever # 持续运行,配合调度器设置时长

    调度器→持续时间:300秒 # 压测5分钟

3. 取样器(Sampler):发送请求的执行单元

  • 作用:向服务器发送请求(HTTP / 数据库 / FTP 等),是测试的核心操作

  • 常用类型及配置

取样器类型 用途 关键配置
HTTP 请求 Web 接口测试 服务器名称、路径、方法
JDBC 请求 数据库性能测试 SQL 语句、参数化变量
TCP 请求 协议层测试 主机、端口、请求数据
  • HTTP 请求示例(测试商品详情接口):

    • 服务器名称或 IP:api.mall.com

    • 路径:/goods/detail

    • 方法:GET

    • 参数:goodsId=${goodsId}(${goodsId} 为参数化变量)

4. 配置元件:预设参数,简化脚本

  • HTTP 请求默认值:统一设置所有 HTTP 请求的服务器地址、端口,避免重复配置

  • HTTP Cookie 管理器:自动处理 Session,无需手动添加 Cookie

  • CSV 数据文件设置:从外部文件读取测试数据(如批量登录的用户名密码),核心配置:

    文件名:D:\testdata\users.csv

    变量名称:username,password # CSV文件的列名

    分隔符:,(逗号)

    遇到文件结束符再次循环?:False

    遇到文件结束符停止线程?:True

5. 定时器:模拟真实用户的思考时间

  • 固定定时器:每个请求间隔固定时间(如 2 秒),适合稳定场景

  • 高斯随机定时器:按高斯分布生成延迟(如 1-3 秒随机),更贴近真实用户行为

  • 同步定时器:让多个线程同时发送请求,模拟瞬间高并发(如秒杀场景)

6. 断言:验证响应是否符合预期

  • 响应断言 :检查响应中是否包含指定文本(如"code":200

  • 持续时间断言:验证响应时间是否小于阈值(如 500ms)

  • JSON 断言(接口测试必备):用 JSONPath 验证响应,示例:

    • JSONPath 表达式:$.data.goodsName

    • 预期值:iPhone 15

7. 后置处理器:提取响应数据,实现关联

  • JSON 提取器(最常用):从 JSON 响应中提取动态值(如 token),配置:

    引用名称:token # 提取后的变量名,用${token}调用

    JSONPath表达式:$.data.token

    匹配数字:0(取第一个匹配结果)

  • 正则表达式提取器:处理非 JSON 响应,如从 HTML 中提取订单 ID:

    • 引用名称:orderId

    • 正则表达式:orderId=(\d+)

    • 模板:$1$

8. 监听器:收集并展示测试结果

  • 查看结果树:调试时用,显示每个请求的请求 / 响应详情

  • 聚合报告:核心指标汇总(必看!),关键指标说明:

指标 含义 健康阈值
样本 总请求数 -
平均值 平均响应时间(ms)
90% 百分位 90% 用户的响应时间 < 800
错误率 请求失败比例 %
Throughput 吞吐量(请求 / 秒) 越高越好
  • HTML 报告:压测完成后生成可视化报告,命令:

    jmeter -n -t test.jmx -l result.csv -e -o report # 生成report目录的HTML报告

9. 逻辑控制器:控制请求执行顺序

  • 事务控制器:将多个请求组合为一个事务(如 "登录→加购→下单" 视为一个事务)

  • 如果(If)控制器 :满足条件才执行(如${userId} != null

  • 循环控制器:重复执行子元件(如循环查询商品列表 5 次)


三、单接口配置


1. 添加线程组

2. 添加HTTP请求

3. 添加其他配置元件


四、接口压测

1. 分布式压测(模拟 10000 + 并发)

当单机无法模拟足够压力时,用多台机器分布式压测:

  1. 执行机配置:所有执行机启动 jmeter-server:

    # Linux执行机(指定IP,避免网卡问题)

    jmeter-server -Djava.rmi.server.hostname=192.168.1.101

  2. 控制机配置 :修改bin/jmeter.properties

    remote_hosts=192.168.1.101,192.168.1.102 # 执行机IP列表

    server.rmi.ssl.disable=true # 禁用SSL,简化配置

  3. 执行命令

    jmeter -n -t test.jmx -R 192.168.1.101,192.168.1.102 -l result.csv

2. 阶梯加压(模拟真实流量增长)

用「Concurrency Thread Group」插件实现阶梯式加压(需先下载插件放 lib/ext 目录):

复制代码
目标并发用户数:1000

起步并发:100

步长:100

每步持续时间:60秒

稳定持续时间:300秒

3. BeanShell 脚本:动态处理复杂逻辑

  • 生成随机手机号:在 BeanShell 前置处理器中添加:

    String mobile = "138" + (int)(Math.random()*100000000);

    vars.put("mobile", mobile); // 存入变量,供取样器调用

  • 日志输出:调试时打印变量值:

    log.info("当前用户:" + vars.get("username")); // 日志在jmeter.log中查看


五、常见问题分析

问题现象 根本原因 解决方案
内存溢出(OOM) 默认堆内存不足 + 监听器过多 1. 改 setenv.bat 增大堆内存;2. 压测时只保留聚合报告监听器
连接重置错误 服务器过载或端口被占 1. 减少线程数;2. 检查服务器端口是否被防火墙拦截
断言频繁失败 动态数据未关联 用 JSON 提取器提取动态值,传递给后续请求
并发用户数达不到预期 单机资源瓶颈 改用分布式压测,或优化 JVM 参数
HTTP 403 错误 缺少 Token 或 Cookie 添加 HTTP Cookie 管理器,提取并传递 Token
脚本在 CLI 模式运行失败 路径含空格或中文 重新解压 JMeter 到无空格路径(如 D:\JMeter)
分布式测试连接超时 SSL 未禁用或端口未开放 1. 配置 server.rmi.ssl.disable=true;2. 开放 60000 端口
参数化数据重复使用 CSV 配置未勾选停止线程 勾选 "遇到文件结束符停止线程?=True"

六、JMeter 学习路径

  • 基础层:安装配置→线程组 + HTTP 请求 + 监听器→结果分析

  • 进阶层:参数化(CSV)→关联(JSON 提取器)→断言→BeanShell

  • 专家层:分布式压测→插件开发→持续集成(Jenkins+JMeter)

  • 领域层:全链路压测→云环境压测→性能调优

相关推荐
shughui1 天前
JMeter(二):什么是jmeter参数化?为什么需要它?如何使用
测试工具·jmeter·性能优化·单元测试
无名小卒Rain2 天前
Jmeter性能测试-长短链接的处理
jmeter
幺零九零零6 天前
压测-JMeter(八)
jmeter
唐古乌梁海7 天前
JMeter电商项目:活动页面压测经验分享
经验分享·jmeter
查拉图斯特拉面条7 天前
JMeter JSR223后置处理器:JSON数据处理与格式转换实战指南
python·jmeter·json
xiaoliuliu123457 天前
Apache JMeter 2.9 简单上手教程(附下载包)
jmeter·apache
qq13267029408 天前
ARM版统信UOS桌面安装Jmeter
jmeter·jdk·arm·统信uos
oh-pinpin8 天前
【jmeter】-脚本-导入添加接口(F12复制 cURL )
测试工具·jmeter·压力测试
查拉图斯特拉面条9 天前
JMeter JSON数据提取后处理指南:为ID值添加双引号
jmeter·json