jMeter压测环境部署JDK+Groovy+JMeter+Proto+IntelliJ IDEA

发布于:2025-05-10 ⋅ 阅读:(12) ⋅ 点赞:(0)

为确保 Groovy、JDK 和 JMeter 三者的版本兼容性,需遵循以下核心原则和步骤:


一、版本兼容性对照表

组件 推荐版本范围 关键兼容规则
JDK Java 8/11/17 (LTS) - JMeter 5.6+ 支持 Java 11/17
Groovy Groovy 3.0.7+ 或 4.0+ - Groovy 3.x 支持 Java 8-17
- Groovy 4.x 支持 Java 11-21
JMeter JMeter 5.6+ - JMeter 5.6+ 内置 Groovy 3.0.7
- 若需更高版本,需手动替换 lib 目录的 JAR

二、操作步骤

1. 检查当前版本
  • JDK 版本

    java -version
    # 输出示例:openjdk 17.0.11
  • JMeter 版本

    • 启动 JMeter → 顶部菜单栏显示版本(如 5.6.3

    • 或命令行:

      jmeter -v
  • Groovy 版本

    • JMeter 内置版本

      • 查看 JMETER_HOME/lib 目录下的 groovy-*.jar(如 groovy-3.0.7.jar

    • 项目依赖版本(若自定义):

      # Maven 项目检查 pom.xml
      grep '<groovy.version>' pom.xml
      
      # Gradle 项目检查 build.gradle
      grep 'org.apache.groovy' build.gradle

2. 调整版本组合(推荐方案)
场景 1:使用 JMeter 默认配置
  • JDK: Java 11 或 17

  • JMeter: 5.6.3

  • Groovy: 3.0.7(JMeter 内置)

  • 优点: 无需额外配置,稳定性最佳。

场景 2:需更高版本 Groovy
  • JDK: Java 17

  • JMeter: 5.6.3

  • Groovy: 4.0.21(手动替换)

场景 3:使用 Java 21+
  • JDK: Java 21

  • JMeter: 5.6.3(需手动升级依赖)

  • Groovy: 4.0.21(必须)

  • 额外操作

    • 在 JMETER_HOME/bin/jmeter 中设置:

      JAVA_HOME=/path/to/jdk-21

3. 验证兼容性
  • 步骤 1:编写测试脚本
    在 JMeter 中添加 JSR223 PreProcessor,输入以下代码:

    log.info("JDK Version: " + System.getProperty("java.version"))
    log.info("Groovy Version: " + GroovySystem.version)
  • 步骤 2:运行脚本
    查看 JMeter 日志输出,确认版本匹配:

    INFO o.a.j.e.StandardJMeterEngine: JDK Version: 17.0.11
    INFO o.a.j.e.StandardJMeterEngine: Groovy Version: 4.0.21

三、常见问题解决

问题 1:Unsupported class file major version
  • 原因:JDK 版本高于 Groovy 支持范围。

  • 解决

    • 降级 JDK 至兼容版本(如 Java 17)。

    • 或升级 Groovy 到 4.0+。

问题 2:JMeter 启动失败
  • 原因:Groovy JAR 版本冲突。

  • 解决

    • 删除 lib 目录下所有 groovy-*.jar,重新放入正确版本。

问题 3:脚本执行性能差
  • 原因:Groovy 3.0.7 默认解释执行,非编译。

  • 解决

    • 在 JSR223 组件中选择 Groovy 语言。

    • 勾选 Cache compiled script(缓存编译脚本)。


四、版本管理最佳实践

  1. 固定版本:在团队中统一 JDK、JMeter、Groovy 版本。

  2. 使用 LTS 版本:优先选择 Java 11/17、JMeter 5.6.x。

  3. 隔离环境:使用 Docker 容器化部署:

    FROM eclipse-temurin:17-jdk
    RUN wget https://dlcdn.apache.org/jmeter/binaries/apache-jmeter-5.6.3.zip && \
        unzip apache-jmeter-5.6.3.zip

通过以上方法,可确保 Groovy、JDK 和 JMeter 版本兼容,避免因环境配置导致的脚本执行异常。

Groovy、JDK、JMeter 兼容版本安装方案(全平台)

一、环境要求
  • 操作系统:Windows 10+/Linux/macOS

  • 用户权限:管理员/root权限(用于安装软件)

  • 网络:可访问互联网以下载安装包


二、详细安装步骤


1. 安装 JDK 17 (推荐长期支持版本)
Windows
  1. 下载 JDK 17

  2. 安装

    • 双击安装程序,按提示操作

    • 默认安装路径:C:\Program Files\Java\jdk-17.0.x

  3. 配置环境变量

    • 右键 此电脑 → 属性 → 高级系统设置 → 环境变量

    • 新建系统变量

      • 变量名:JAVA_HOME

      • 变量值:C:\Program Files\Java\jdk-17.0.x

    • 编辑 Path 变量

      • 添加 %JAVA_HOME%\bin

  4. 验证安装

    java -version
Linux (Ubuntu/Debian)
  1. 下载 JDK 17

    wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz
  2. 解压并安装

    sudo tar -xzf openjdk-17.0.2_linux-x64_bin.tar.gz -C /usr/lib/jvm/
  3. 配置环境变量

    sudo nano /etc/environment
    # 添加以下内容:
    JAVA_HOME="/usr/lib/jvm/jdk-17.0.2"
    PATH="$PATH:$JAVA_HOME/bin"
    # 保存后执行:
    source /etc/environment
  4. 验证安装

    java -version
macOS
  1. Homebrew 安装

    brew install openjdk@17
  2. 配置环境变量

    echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc
    source ~/.zshrc
  3. 验证安装

    java -version

2. 安装 JMeter 5.6.3
全平台通用步骤
  1. 下载 JMeter

  2. 解压安装

    • Windows:解压到 D:\Tools\apache-jmeter-5.6.3

    • Linux/macOS

      unzip apache-jmeter-5.6.3.zip -d /opt/
  3. 配置环境变量

    • Windows

      • 变量名:JMETER_HOME

      • 变量值:D:\Tools\apache-jmeter-5.6.3

      • 编辑 Path:添加 %JMETER_HOME%\bin

    • Linux/macOS

      echo 'export JMETER_HOME="/opt/apache-jmeter-5.6.3"' >> ~/.bashrc
      echo 'export PATH="$JMETER_HOME/bin:$PATH"' >> ~/.bashrc
      source ~/.bashrc
  4. 验证安装

    jmeter -v
    # 应输出:5.6.3

3. 配置 Groovy 版本
方案一:使用 JMeter 内置 Groovy 3.0.7
  • 无需额外操作,JMeter 5.6.3 默认包含 groovy-3.0.7.jar

方案二:手动升级到 Groovy 4.0.21
  1. 下载 Groovy 4.0.21

  2. 替换 JAR 文件

    • 删除 JMETER_HOME/lib/groovy-3.0.7.jar

    • 将 groovy-4.0.21.jar 复制到 JMETER_HOME/lib/

  3. 验证 Groovy 版本

    • 在 JMeter 中添加 JSR223 Sampler,输入:

      log.info("Groovy Version: " + GroovySystem.version)
    • 查看日志输出是否为 4.0.21


4. 安装 Protocol Buffers 编译器(可选)
Windows
  1. 下载 protocReleases · protocolbuffers/protobuf · GitHub

  2. 解压 protoc-25.1-win64.zip,将 bin/protoc.exe 添加到 Path

Linux/macOS
# 安装 protoc
curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v25.1/protoc-25.1-linux-x86_64.zip
unzip protoc-25.1-linux-x86_64.zip -d $HOME/.local
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

三、Docker 快速部署方案

# 使用预装 JDK 17 + JMeter 5.6.3 的镜像
docker run -it --rm \
  -v $(pwd)/scripts:/scripts \
  -v $(pwd)/results:/results \
  justb4/jmeter:5.6.3 \
  -n -t /scripts/test.jmx -l /results/result.jtl


四、验证全组件兼容性

  1. 创建测试脚本 (compatibility_test.jmx):

    • 添加 HTTP Request 到 https://httpbin.org/get

    • 添加 JSR223 PreProcessor

      log.info("JDK: " + System.getProperty("java.version"))
      log.info("Groovy: " + GroovySystem.version)
      vars.put("protoData", new com.your.proto.Message().toString())
  2. 运行测试

    jmeter -n -t compatibility_test.jmx -l result.jtl
  3. 检查日志

    • 确认无 Unsupported major.minor version 错误

    • 日志中应输出:

      INFO o.a.j.p.j.s.JSR223PreProcessor: JDK: 17.0.11
      INFO o.a.j.p.j.s.JSR223PreProcessor: Groovy: 4.0.21

五、故障排查表

问题现象 可能原因 解决方案
JMeter启动报JNI错误 JDK架构与JMeter不匹配 确保JDK与操作系统位数一致(同用64位)
Groovy脚本执行超慢 未启用编译缓存 在JSR223组件中勾选 Cache compiled script
protoc命令未找到 Path配置错误 检查 protoc 是否在系统 Path 中
JMeter无法读取环境变量 未重启终端或IDE 关闭所有终端窗口并重新启动

通过以上步骤,您将获得一个完全兼容的 Groovy + JDK + JMeter 测试环境。

生成jMeter需要的jar包

以下是基于 WebSocket 使用 Protobuf 协议进行通信时,生成 .proto 文件对应的 Java 代码,并在 JMeter 中测试的详细步骤:


一、准备工作

1. 安装 protoc 编译器
  • 参考前文步骤安装 protoc 3.17.3 并配置环境变量。

2. 编写 .proto 文件

假设你的 WebSocket 服务使用 Protobuf 格式传输数据,例如 message.proto

syntax = "proto3";

package example;

message Request {
  string query = 1;
}

message Response {
  string result = 1;
}


二、生成 Java 代码

1. 生成 Protobuf 序列化类

在 .proto 文件目录下执行:

protoc --java_out=./generated message.proto

  • 生成的 Request.java 和 Response.java 会保存在 generated/example 目录。

2. 编译并打包为 JAR

javac -d ./out generated/example/*.java
jar cvf message-protobuf.jar -C out .

  • 生成 message-protobuf.jar,后续需将此 JAR 放入 JMeter 的 lib 目录。


三、JMeter 配置

1. 安装 WebSocket 插件

JMeter 默认不支持 WebSocket,需安装插件:

2. 导入 Protobuf 依赖
  • 将 message-protobuf.jar 和 Protobuf 的 Java 运行时库(如 protobuf-java-3.17.3.jar)复制到 JMeter 的 lib 目录。

  • 重启 JMeter。


四、创建 JMeter 测试计划

1. 添加线程组
  • 右键 Test Plan → Add → Threads (Users) → Thread Group。

2. 添加 WebSocket 连接
  • 右键 Thread Group → Add → Sampler → WebSocket Open Connection。

  • 配置参数:

    • Server URLws://your-server:port/path (WebSocket 服务地址)

    • Connection Timeout5000 (ms)

3. 添加 Protobuf 序列化脚本
  • 右键 Thread Group → Add → Pre Processor → JSR223 PreProcessor。

  • 选择语言为 Groovy,编写序列化脚本:

import example.Request;

// 创建 Protobuf 请求对象
Request request = Request.newBuilder()
    .setQuery("test")
    .build();

// 将 Protobuf 对象转为字节数组
byte[] payload = request.toByteArray();

// 将字节数组保存到变量中
vars.put("requestBytes", payload);

4. 添加 WebSocket 请求
  • 右键 Thread Group → Add → Sampler → WebSocket Write Sampler。

  • 配置参数:

    • WebSocket Sessiondefault (与 Open Connection 一致)

    • Message TypeBinary (Protobuf 使用二进制传输)

    • Message${requestBytes} (引用前置处理器生成的字节数组)

5. 添加响应解析脚本
  • 右键 Thread Group → Add → Post Processor → JSR223 PostProcessor。

  • 选择语言为 Groovy,编写反序列化脚本:

import example.Response;

// 从响应中获取二进制数据
byte[] responseBytes = prev.getResponseData();

// 反序列化为 Protobuf 对象
Response response = Response.parseFrom(responseBytes);

// 提取结果并保存到变量
vars.put("result", response.getResult());

6. 添加断言(可选)
  • 右键 WebSocket Write Sampler → Add → Assertion → Response Assertion。

  • 配置检查点(如验证 ${result} 是否包含特定值)。

7. 添加结果监听器
  • 右键 Thread Group → Add → Listener → View Results Tree。

  • 右键 Thread Group → Add → Listener → Summary Report。


五、执行测试

  1. 启动 WebSocket 服务

    • 确保服务端已运行并监听指定端口(如 ws://localhost:8080/ws)。

  2. 运行 JMeter

    • 点击 ▶️ 启动测试,观察 View Results Tree 中的请求和响应详情。


六、关键注意事项

  1. 二进制传输模式

    • WebSocket 需使用 Binary 类型发送 Protobuf 字节流,而非文本。

  2. 依赖管理

    • 确保所有 Protobuf 相关的 JAR(包括生成的 message-protobuf.jar 和官方 protobuf-java-3.17.3.jar)已放入 JMeter 的 lib 目录。

  3. 调试技巧

    • 在 JSR223 脚本 中使用 log.info() 打印变量值:

      log.info("Result: " + vars.get("result"));

七、常见问题

1. 报错 ClassNotFoundException: com.google.protobuf.Message
  • 原因: 未导入 protobuf-java-*.jar

  • 解决: 将 Protobuf 的 Java 运行时库放入 JMeter 的 lib 目录。

2. 响应数据无法解析
  • 原因: 服务端返回的数据格式不符合 Protobuf 定义。

  • 解决: 使用 Wireshark 或服务端日志检查实际传输的二进制数据。


通过以上步骤,你可以实现在 JMeter 中通过 WebSocket 发送和接收 Protobuf 格式的数据。

IntelliJ IDEA编写JSR223 脚本

在IntelliJ IDEA中编写JMeter的JSR223,需要结合IDE的编码环境和JMeter的脚本执行逻辑。以下是详细步骤:


1. 环境准备

  • 安装IntelliJ IDEA:确保已安装最新版本(社区版或旗舰版)。

  • 安装JDK:配置JDK 8或更高版本(建议JDK 17),并在IDEA中设置。

  • 安装Groovy插件(推荐):
    File -> Settings -> Plugins,搜索"Groovy",安装并重启IDEA。


2. 创建新项目

  1. 新建项目
    File -> New -> Project,选择:

    • 模板:Maven或Gradle项目(推荐Maven,便于依赖管理)。

    • 语言:Java或Groovy。

    • JDK:选择已配置的JDK。

  2. 命名项目:如JSR223-PreProcessor-Demo


3. 添加JMeter依赖

在项目的pom.xml(Maven)或build.gradle(Gradle)中添加JMeter核心库依赖:

Maven配置

<dependencies>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_core</artifactId>
        <version>5.6.2</version> <!-- 与你的JMeter版本一致 -->
    </dependency>
</dependencies>

Gradle配置

dependencies {
    implementation 'org.apache.jmeter:ApacheJMeter_core:5.6.2'
}


4. 创建JSR223预处理器脚本

  1. 新建Groovy脚本文件
    Right-click src/main/groovy -> New -> Groovy Script,命名为DemoPreProcessor.groovy

  2. 编写脚本逻辑

    import org.apache.jmeter.threads.JMeterVariables
    import org.apache.jmeter.util.JMeterUtils
    
    // JMeter内置对象(自动注入)
    def vars = JMeterVariables.INSTANCE.get()
    def log = JMeterUtils.getLog()
    
    // 示例:生成动态参数并存储到变量
    def randomValue = new Random().nextInt(100)
    vars.put("dynamicParam", randomValue.toString())
    
    log.info("Generated dynamicParam: " + randomValue)

5. 调试脚本

  • 模拟JMeter上下文:在IDE中直接运行脚本可能无法访问真实JMeter变量,建议:

    1. 在脚本中添加单元测试,模拟varslog对象。

    2. 将脚本复制到JMeter的JSR223 PreProcessor中实际测试。


6. 集成到JMeter

  1. 导出脚本:将DemoPreProcessor.groovy保存到JMeter测试计划目录(如scripts/)。

  2. 配置JMeter元件

    • 添加 JSR223 PreProcessor 到HTTP请求。

    • 选择语言为Groovy

    • 设置脚本来源:

      • 直接粘贴代码:复制Groovy脚本内容到输入框。

      • 外部文件引用:勾选"Cache compiled script",路径填写scripts/DemoPreProcessor.groovy


7. 注意事项

  • 性能优化:启用脚本缓存(Cache compiled script)以提高性能。

  • 依赖管理:若脚本使用第三方库,需将JAR包放入JMeter的lib/ext目录。

  • 日志调试:使用log.info()输出日志,在JMeter的View Results Tree中查看。


完整流程图示

IntelliJ IDEA编写脚本 -> 导出为.groovy文件 -> JMeter加载脚本 -> 执行测试计划

通过以上步骤,你可以在IntelliJ IDEA中高效编写和调试JSR223预处理器脚本,并集成到JMeter测试计划中。


网站公告

今日签到

点亮在社区的每一天
去签到