天天看點

Jmeter工具bean shell使用總結

1.samper對象(用于前置處理器)

a.sampler (是Samper對象)

參考http://jmeter.apache.org/api/org/apache/jmeter/samplers/Sampler.html

import org.apache.jmeter.config.Arguments;
         
         a)擷取http請求的 url
           String url = sampler.getPath();
         b)擷取http請求的body内容           
           Arguments arguments = sampler.getArguments(); // 調用時注意sampler小寫
          String body = arguments.getArgument(0).getValue();
           

示例代碼(将請求體body轉化為json/map等資料格式):

import com.alibaba.fastjson.*;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSON;
import com.tuhu.open.sdk.sign.Signer;
import java.util.Map;

//defing the privateKey for sign
private static final String PRIVATE_KEY = "${publicKey}";

String date = "${__time(,)}";
vars.put("timestamp", date);

Arguments arguments = sampler.getArguments(); 
Argument arg = arguments.getArgument(0);
String body = arg.getValue();
log.info("=body=****************"+ body);

//JSONObject json = JSONObject.parseObject(body);
//log.info("=json=****************"+ json);

Map map = (Map)JSON.parseObject(body);
log.info("=map=****************"+ map);

//generate the sign by class Signer which offered by developer
Signer signer = new Signer(PRIVATE_KEY);
sign = signer.sign(map, PRIVATE_KEY, "UTF-8", "RSA2");
log.info("=sign=****************"+ sign);

JSONObject parseObject = JSON.parseObject(body);
log.info("=parseObject=****************"+ parseObject);

parseObject.put("sign",sign);
String  postData = parseObject.toJSONString();

//set the date into request
arg.setValue(postData);
           

argument的接口文檔介紹:(轉)

b.Jmeter beanshell

import org.apache.jmeter.samplers.*;
import org.apache.jmeter.config.*;  
import com.alibaba.fastjson.*;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSON;
import com.michael.open.sdk.sign.Signer;
import java.util.Map;
import java.util.Random;

public class Random_str {

	public static String RandomJianHan(int len) {
		String ret = "";
		
		for (int i = 0; i < len; i++) {
		
			String str = null;
			int hightPos, lowPos; // define high and low
			
			Random random = new Random();
			hightPos = (176 + Math.abs(random.nextInt(39))); // get the high
			lowPos = (161 + Math.abs(random.nextInt(93))); // get the low
			byte[] b = new byte[2];
			b[0] = (new Integer(hightPos).byteValue());
			b[1] = (new Integer(lowPos).byteValue());
			
			try {
				str = new String(b, "GBk"); // into chinese
			} catch (UnsupportedEncodingException ex) {
				ex.printStackTrace();
			}
			ret += str;
		}
		
		return ret;
	}

	public static String getRandomNumber(int length){
	     String str="123456789";
	     Random random=new Random();
	     StringBuffer sb=new StringBuffer();
	     for(int i=0;i<length;i++){
	       int number=random.nextInt(9);
	       sb.append(str.charAt(number));
	     }
	     return sb.toString();
 	}
}

String date = "${__time(,)}";
Random_str hanChar = new Random_str();

String type = vars.get("dataType");


if (type.equals("NAME")){
	
	vars.put("value", hanChar.RandomJianHan(8));
	
}else if (type.equals("MAILBOX")){
	
	vars.put("value", date+vars.get("value"));
	
}else if (type.equals("MOBILE")){
	
	vars.put("value", hanChar.getRandomNumber(11));
	
}else{
	
	vars.put("value", vars.get("value")+date);
}

//defing the privateKey for sign
private static final String PRIVATE_KEY = "${publicKey}";
vars.put("timestamp", date);

Arguments arguments = sampler.getArguments(); 
Argument arg = arguments.getArgument(0);
String body = arg.getValue();
log.info("=body=****************"+ body);

Map map = (Map)JSON.parseObject(body);
log.info("=map=****************"+ map);

//generate the sign by class Signer which offered by developer
Signer signer = new Signer(PRIVATE_KEY);
sign = signer.sign(map, PRIVATE_KEY, "UTF-8", "RSA2");
log.info("=sign=****************"+ sign);

JSONObject parseObject = JSON.parseObject(body);
log.info("=parseObject=****************"+ parseObject);

parseObject.put("sign",sign);
String  postData = parseObject.toJSONString();

//set the date into request
arg.setValue(postData);
           

c.Jmeter beanshell 跨線程組傳值(設定全局屬性)

  • put值
String str = vars.get("accountNoSetup");
props.put("accountNo",str);
           
  • get值
vars.put("accountNo",props.get("accountNo"));