BeanShell PreProcessor获取请求http-Get 参数进行排序后进行签名加密后重新发送:

例子:

 

 

代码:

import org.apache.jmeter.protocol.http.sampler;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.config.Argument;

import java.io.*;
import org.json.*;

Arguments arguments = sampler.getArguments();   // 获取请求
int count = arguments.getArgumentCount();


Map smap = arguments.getArgumentsAsMap();
JSONObject dataObj = new JSONObject();

Set keyset = smap.keySet();
Iterator  it = keyset.iterator();
while(it.hasNext()){
	String key = it.next();
	if(!key.equals("")){#Get 参数加了多行空参数
		String value = smap.get(key);
		log.info(key+"****"+value);
		dataObj.put(key, value);
	}
}

List keyArry = new ArrayList();   // 创建list存储body中的key值
Iterator iterator = dataObj.keys();   // 生成迭代对象

// 循环key,将其放入list
while (iterator.hasNext()) {
 String key = (String) iterator.next();

 // 去除sign
 if (!key.equals("sign") && !key.equals("Sign")) {
  keyArry.add(key);
 }
}

Collections.sort(keyArry);   // 对list进行排序

// 循环list中的key,读取对应的Value组成字符串
String re = "";
for (String s : keyArry) {
 String str = dataObj.getString(s);
 if (!str.equals("")) {
  re += str;
 }
}
log.info(re);

#处理sign过程省略。。。。 最后添加sign字段
sampler.addArgument("sign", sign.toString());

  

测试结果

INFO o.a.j.u.BeanShellTestElement: name****tom
INFO o.a.j.u.BeanShellTestElement: age****23
INFO o.a.j.u.BeanShellTestElement: sex****1
INFO o.a.j.u.BeanShellTestElement: 23tom1

 

posted on 2021-10-20 18:09  Old-Kang  阅读(374)  评论(0编辑  收藏  举报