首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

JMeter 發送二進制壓縮報文:Java Sampler 自定義實作

     編輯:Java 綜合教學

JMeter 發送二進制壓縮報文:Java Sampler 自定義實作

JMeter 預設 HTTP Sampler 僅支援明文報文。若被測介面採用二進制協議並經 java.util.zip 壓縮,需透過 Java Request Sampler 撰寫自定義取樣器,將業務邏輯封裝為 JMeter 插件。本文完整示範從 Maven 專案建立、核心代碼實作、打包部署到 JMeter、測試計劃配置到結果驗證的全流程。

專案結構與依賴

jmeter-binary-sampler
├── src/main/java/com/test/jmeter/Jmeter_Byte.java
├── pom.xml
依賴:
- org.apache.jmeter:ApacheJMeter_java:5.6.3 (provided)
- org.apache.httpcomponents:httpclient:4.5.13
- 專案業務 jar (含 InnerSendZip 壓縮發送工具)

核心取樣器代碼

package com.test.jmeter;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import javacommon.util.ResultClass;
import javacommon.util.send.InnerSendZip;

public class Jmeter_Byte extends AbstractJavaSamplerClient {

    private static final String LABEL = "ByteResponse";
    private String url, data;

    @Override
    public void setupTest(JavaSamplerContext ctx) {
        System.out.println("setupTest - 初始化資源");
    }

    @Override
    public SampleResult runTest(JavaSamplerContext ctx) {
        url  = ctx.getParameter("url");
        data = ctx.getParameter("data");

        SampleResult sr = new SampleResult();
        sr.setSampleLabel(LABEL);
        sr.sampleStart(); // 開始計時

        // 呼叫業務發送邏輯(含二進制壓縮)
        ResultClass result = InnerSendZip.sendData(url, data, 8000, 90000);

        if (result.getResult() == 0) sr.setSuccessful(true);
        else sr.setSuccessful(false);

        sr.sampleEnd(); // 結束計時
        sr.setResponseCode(String.valueOf(result.getResultCode()));
        sr.setResponseMessage(result.getResultDesc());
        return sr;
    }

    @Override
    public void teardownTest(JavaSamplerContext ctx) {
        // 釋放資源
    }

    @Override
    public Arguments getDefaultParameters() {
        Arguments params = new Arguments();
        params.addArgument("url", "https://127.0.0.1:8080/Interface/api/CisInnerSync?platform=cis&correlateid=xxx");
        params.addArgument("data", "{\"areaNo\":\"TEST\",\"bit_rate\":\"1.5\", ... }");
        return params;
    }
}

打包部署步驟

  1. 執行 mvn clean package 產生 jmeter-binary-sampler-1.0.jar。
  2. 將 jar 複製到 JMeter 目錄 lib/ext/ 下。
  3. 重啟 JMeter GUI。

測試計劃配置

  1. 新增 執行緒群組 → 右鍵 取樣器 → Java Request。
  2. 類名稱下拉選擇 com.test.jmeter.Jmeter_Byte。
  3. 參數區塊會自動顯示 url、data,按需修改。
  4. 新增 摘要報告、查看結果樹 等監聽器。

執行結果驗證

Java Request 配置畫面

摘要報告

查看結果樹

關鍵技術點總結

  • 繼承 AbstractJavaSamplerClient,實作 runTest 回傳 SampleResult。
  • 使用 sr.sampleStart()/sampleEnd() 精準統計響應時間。
  • getDefaultParameters() 定義 GUI 參數預設值,方便測試人員直接修改。
  • 業務邏輯(二進制組裝、壓縮、發送、解析)完全委託既有工具類 InnerSendZip,取樣器僅負責 JMeter 生命週期整合。
  • 若需多組參數壓測,可搭配 CSV Data Set Config 讀取外部檔案,並在 setupTest 中預載入記憶體。

參考資源

JMeter Java Request 開發指南

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved