Jmeter之RPC协议脚本开发实现

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中运行就可以了(有问题就直接留言哦)

猜你喜欢

转载自blog.csdn.net/qq_19594755/article/details/81305948