1、首先通过本文是通过jmeter的java请求方式实现RPC协议脚本请求,具体关于java请求如果基于jmeter实现见:jmeter之java请求;如果还想了解rpc脚本开发详细见:rpc协议之hprose接口测试 。
2、分别需要创建两个类 send类、ApiServiceRPCInterface类(完成jmeter一些操作):
首先需要新建一个java工程,然后导入hprose的依赖jar包
send类如下:
package com.apiservicerpc.test;
import java.util.HashMap;
import java.util.Map;
import hprose.client.HproseHttpClient;
public class Send {
@SuppressWarnings("unchecked")
public static Map<String, Object> sendRequest(int order_id,String fields) throws Throwable{
Map<String,Object> map=new HashMap<String,Object>();
//实例化一个HproseHttpClient对象
HproseHttpClient client = new HproseHttpClient();
//创建一个client 连接
client.useService("http://apiservice.test.com/order/OrderCenter");
map = (Map<String, Object>) client.invoke("getOrderInfoById",new Object[]{order_id,fields});
System.out.println("发送请求完成:----------响应信息为:-" + map );
return map;
}
//注意:如果在jmeter中执行时候一定要注释掉main方法部分哦
public static void main(String[] args) throws Throwable {
// TODO Auto-generated method stub
String responseMsg;
int order_id = 1111170144;
String fields = "order_id,order_num,order_price";
Map<String,Object> map=new HashMap<String,Object>();
map = Send.sendRequest(order_id, fields);
System.out.println("*********返回结果:" + map);
responseMsg = map.get("code").toString();
System.out.println();
if(responseMsg.equals("0")) {
System.out.println("********成功*********");
}else {
System.out.println("---------失败----------" + map);
}
}
}
ApiServiceRPCInterface类如下:
package com.apiservicerpc.test;
import java.util.HashMap;
import java.util.Map;
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;
public class ApiServiceRPCInterface extends AbstractJavaSamplerClient {
Map<String,Object> map;
String result;
String url = "" ;
private int order_id = 0;
private String fields = null;
String responseMsg = null;
//自定义java方法入参
//params.addArgument("num1","");表示入参名为num1,默认值为空
//设置可用参数及默认值
public Arguments getDefaultParameters(){
Arguments params = new Arguments();
params.addArgument("url","输入http://IP:port");
params.addArgument("order_id","1111170144");
params.addArgument("fields","order_id,order_num,order_price");
return params;
}
//线程执行前的初始化工作
public void setupTest(JavaSamplerContext arg0){
map=new HashMap<String,Object>();
}
@Override
public SampleResult runTest(JavaSamplerContext arg0) {
url = arg0.getParameter("url");
order_id = arg0.getIntParameter("order_id");
// System.out.println("---------------" + order_id);
fields = arg0.getParameter("fields");
// System.out.println("---------------" + fields);
SampleResult sr = new SampleResult();
sr.setSampleLabel("通过定单id获取定单信息");
//事物开始标记 ,jmeter开始统计响应时间
sr.sampleStart();
try {
map = Send.sendRequest(order_id, fields);
// System.out.println("我是服务器响应的map对象" + map);
responseMsg = map.get("code").toString();
if(responseMsg.equals("0")){
//在查看结果树种展现结果
//sr.setResponseData("正确结果是:" +responseCode,null);
sr.setResponseData("正确结果是:" + map,null);
sr.setDataType(SampleResult.TEXT);
//设置事物是否通过
sr.setSuccessful(true);
}else{
sr.setResponseData("错误结果是:" + map,null);
//sr.setResponseData("错误结果是:" + responseCode,null);
sr.setDataType(SampleResult.TEXT);
sr.setSuccessful(false);
}
} catch (Exception e) {
// TODO Auto-generated catch block
sr.setSuccessful(false);
} catch (Throwable e) {
// TODO Auto-generated catch block
sr.setSuccessful(false);
e.printStackTrace();
}
sr.sampleEnd(); //事物结束
return sr;
}
//测试结束时调用SendTest2.java
public void teardownTest(){
}
}
3、最后导出jar包、直接放入jmeter中运行就可以了(有问题就直接留言哦)