jmeter java请求实例_jmeter grpc 自定义开发java请求案例

1.主要实现方法是借助JavaSamplerClient 实现接口:

import org.apache.jmeter.config.Arguments;

import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;

import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;

import org.apache.jmeter.samplers.SampleResult;

以下main注释的方法主要用于本地调试接口,setup主要实现前置操作,构造初始数据,runTest主要实现接口调用和返回

public class ClientPredictGrpc implements JavaSamplerClient {

private static final Logger logger = LoggerFactory.getLogger(ClientPredictGrpc.class);

private int port ;

private String ip ;

private BatchInferenceRequest batchInferenceRequest;

@Override

public void setupTest(JavaSamplerContext ctx) {

String serviceId = ctx.getParameter("serviceId");

String userId = ctx.getParameter("userId");

Random random =new Random();

this.ip=ctx.getParameter("ip");

this.port =ctx.getIntParameter("port");

int columns = ctx.getIntParameter("featureCols");

int uidNumber = ctx.getIntParameter("batchSize");

this.batchInferenceRequest =new BatchInferenceRequest();

this.batchInferenceRequest.setServiceId(serviceId);

this.batchInferenceRequest.setCaseId(Long.toString(System.currentTimeMillis()));

List singleInferenceDataList = Lists.newArrayList();

BatchInferenceRequest.SingleInferenceData singleInferenceData =new BatchInferenceRequest.SingleInferenceData() ;

//todo set batch list the same batchList data each batch request

for (int j = 0; j< columns; j++){

String featureColumnName=String.format("x%d",j);

singleInferenceData.getFeatureData().put(featureColumnName, random.nextInt(2));

}

for (int i = 0; i < uidNumber; i++) {

Map uidMap=new HashMap<>();

uidMap.put("user_id", userId);

singleInferenceData.getSendToRemoteFeatureData().putAll(uidMap);

singleInferenceData.setIndex(i);

singleInferenceDataList.add(singleInferenceData);

}

this.batchInferenceRequest.setBatchDataList(singleInferenceDataList);

}

@Override

public SampleResult runTest(JavaSamplerContext ctx) {

SampleResult result= new SampleResult();

result.sampleStart();

try {

JSONObject jsonObject= ClientGrpc.call(this.ip,this.port,this.batchInferenceRequest);

if (jsonObject.get("retcode") == null || !jsonObject.getString("retcode").equals(InferenceRetCode.OK)){

if (jsonObject.get("retcode") == null){

result.setSuccessful(false);

result.setResponseData(jsonObject.toJSONString(),"utf-8");

result.setResponseCode("retcode is null ");

}else {

result.setResponseData(jsonObject.toJSONString(), "utf-8");

result.setDataType(SampleResult.TEXT);

result.setSuccessful(false);

result.setResponseMessage("failed");

result.setResponseCode(jsonObject.getString("retcode"));

}

}else{

result.setResponseData(jsonObject.toJSONString(),"utf-8");

result.setDataType(SampleResult.TEXT);

result.setSuccessful(true);

result.setResponseMessage("success");

result.setResponseCode("0");

}

}catch (Exception e){

result.setSuccessful(false);

if(e.getMessage() !=null) {

result.setResponseData(e.getMessage(), null);

result.setResponseCode("grpc exception");

}

}finally {

result.sampleEnd();

}

//logger.info("result finally get as String is : "+ result.getResponseDataAsString());

return result;

}

@Override

public void teardownTest(JavaSamplerContext ctx) {

}

@Override

public Arguments getDefaultParameters() {

Arguments arguments =new Arguments();

arguments.addArgument("ip","");

arguments.addArgument("port","");

arguments.addArgument("featureCols","");

arguments.addArgument("userId","");

arguments.addArgument("serviceId","");

arguments.addArgument("batchSize","");

return arguments;

}

// public static void main(String[] args) {

// ClientPredictGrpc demo=new ClientPredictGrpc();

// Arguments arguments = new Arguments();

// String uid="a36fda4444dbdfdb1714c81e86b13c06,a46458c10546bbe794dbca88cd0a4832";

//

// arguments.addArgument("ip","172.16.153.119");

// arguments.addArgument("port","8000");

// arguments.addArgument("header","5");

// arguments.addArgument("userId",uid);

// arguments.addArgument("serviceId","heterolr01");

// JavaSamplerContext ctx=new JavaSamplerContext(arguments);

// demo.setupTest(ctx);

// demo.runTest(ctx);

// demo.teardownTest(ctx);

// }

}

grpc client类:

public class ClientGrpc {

private static Random random = new Random();

private static GrpcConnectionPool GRPC_CONNECTION_POOL = GrpcConnectionPool.getPool();

public static ManagedChannel createManagedChannel(String ip, int port) throws Exception {

return GRPC_CONNECTION_POOL.getManagedChannel(ip, port);

}

static JSONObject call(String ip,int port,BatchInferenceRequest batchInferenceRequest) {

JSONObject predictMessage=null;

ManagedChannel managedChannel = null;

try {

managedChannel = createManagedChannel(ip, port);

InferenceServiceProto.InferenceMessage.Builder inferenceMessageBuilder = InferenceServiceProto.InferenceMessage.newBuilder();

inferenceMessageBuilder.setBody(ByteString.copyFrom(JSON.toJSONString(batchInferenceRequest), "UTF-8"));

InferenceServiceGrpc.InferenceServiceBlockingStub blockingStub = InferenceServiceGrpc.newBlockingStub(managedChannel);

InferenceServiceProto.InferenceMessage inferenceMessage = blockingStub.batchInference(inferenceMessageBuilder.build());

String result = new String(inferenceMessage.getBody().toByteArray());

predictMessage = JSONObject.parseObject(result);

} catch (Exception e) {

e.printStackTrace();

}

return predictMessage;

}

}

好的,您想了解如何使用Jmeter自定义Java请求,并继承AbstractJavaSamplerClient类。下面是一个简单的示例: 1. 创建一个Java类并继承AbstractJavaSamplerClient类,例如: ``` public class MyJavaSampler extends AbstractJavaSamplerClient { // 实现必要的方法 } ``` 2. 实现runTest方法,这个方法会被Jmeter调用执行,例如: ``` public void runTest(JavaSamplerContext context) { // 获取参数 String arg1 = context.getParameter("arg1"); String arg2 = context.getParameter("arg2"); // 执行业务逻辑 // ... // 设置响应结果 SampleResult result = new SampleResult(); result.setSuccessful(true); result.setResponseCodeOK(); result.setResponseMessage("Success"); result.setResponseData("Response Data".getBytes()); // 设置响应时间 result.sampleEnd(); // 返回响应结果 return result; } ``` 3. 实现getDefaultParameters方法,这个方法会返回默认的参数列表,例如: ``` public Arguments getDefaultParameters() { Arguments args = new Arguments(); args.addArgument("arg1", "default value"); args.addArgument("arg2", "default value"); return args; } ``` 4. 将编译好的Java类打包成jar文件,放到Jmeter的lib/ext目录下。 5. 在Jmeter中添加测试计划,并添加一个Java请求,选择刚才打包好的jar文件和类名。 6. 配置Java请求的参数,例如: ``` arg1=value1 arg2=value2 ``` 7. 运行测试计划,查看响应结果。 以上就是使用Jmeter自定义Java请求的简单示例,希望对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值