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;
}
}
mvn clean package 產生 jmeter-binary-sampler-1.0.jar。lib/ext/ 下。com.test.jmeter.Jmeter_Byte。url、data,按需修改。


AbstractJavaSamplerClient,實作 runTest 回傳 SampleResult。sr.sampleStart()/sampleEnd() 精準統計響應時間。getDefaultParameters() 定義 GUI 參數預設值,方便測試人員直接修改。InnerSendZip,取樣器僅負責 JMeter 生命週期整合。setupTest 中預載入記憶體。