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