JMeter 从GET请求获取到参数并排序进行MD5加密更新
帮测试人员写一下jmeter脚本
需求:
从get请求中获取到url的所有参数,根据参数名进行字母排序(顺序),排序好之后加上 appsecurity 参数进行两次MD5加密作为token,将token放入参数一起请求
脚本
import org.apache.commons.codec.digest.DigestUtils;
import java.util.*;
import java.lang.String;
import java.text.Collator;
//获取url
String url = ctx.getPreviousResult().getURL().getQuery();
log.info("url:" url);
//截取url中的参数
String[] split = url.split("&");
HashMap map = new HashMap();
for(String name:split){
for (int i = 0; i < name.length(); i ) {
String[] split1 = name.split("=");
map.put(split1[0], split1[1]);
}
}
log.info("appid:" map.get("appid"));
log.info("anum:" map.get("anum"));
String appsecurity=vars.get("appsecurity");//获取变量
String appid=map.get("appid");//获取变量
String anum= map.get("anum");
//排序
String[] data = {"appid","anum"};
Arrays.sort(data,Collator.getInstance(java.util.Locale.CHINA));
//拼接
StringBuilder str=new StringBuilder();
for (int i=0;i<data.length;i ){
if (i 2>data.length){
str.append(data[i] "=" map.get(data[i]));
}else {
str.append(data[i] "=" map.get(data[i]) "&");
}
}
log.info("str:" str);
//token加密
String token = DigestUtils.md5Hex(str appsecurity);
token = DigestUtils.md5Hex(token);
vars.put("appid",appid);
vars.put("anum",anum);
vars.put("token",token);//把生成的signStr提供给beanshell外部组件引用
想法
首先肯定这脚本有问题
- 如果get请求再多一个参数的话,需要手动将参数接收放入到date中才能进行排序
- 如果原本参数中带有“&”或者“=”这两特殊符号的话,截取的参数就会出现问题
- 我如果将HTTP请求放在BeanShell请求前面的话,那后面就不会再请求,如果放在后面的话,那Get请求还是没有赋值改变,我目前的做法是请求两次,因为第一天写这个玩意,听测试的说有一个BeanShell预处理程序,但是还不知道怎么用,在取样器中能执行的在预处理程序中却有报错,而且好像一样没有将处理好的数据放入请求中
- 而且取值都是用的Java中的笨方法,不知道jmeter有没有更好的直接取值的方法
如果有测试大佬知道正确的做法的话,可以一起交流交流探讨!!球球了!
====================================================
后续更新!!
import org.apache.jmeter.config.Arguments;
import java.util.Map.Entry;
import java.text.Collator;
import org.apache.commons.codec.digest.DigestUtils; //导入md5加密的包
Arguments arguments = sampler.getArguments();
Map map = arguments.getArgumentsAsMap();
map.remove("token");
将map转为list
ArrayList list = new ArrayList();
for(String obj:map.keySet()){
list.add(obj);
}
//排序
list.sort(Collator.getInstance(java.util.Locale.CHINA));
for(String obj:list){
log.info("obj:" obj);
}
//用StringBuilder来接收排序好的list
StringBuilder str = new StringBuilder();
for (int i = 0; i < list.size(); i ) {
if (i 2>list.size()){
str.append(list.get(i) "=" map.get(list.get(i)));
}else{
str.append(list.get(i) "=" map.get(list.get(i)) "&");
}
}
log.info("str:" str);
//从之前就定义的用户变量里面取值
String appsecurity= vars.get("appsecurity");
log.info("appsecurity:" appsecurity);
//加密
String token1 = DigestUtils.md5Hex(str appsecurity);
String token2 = DigestUtils.md5Hex(token1);
log.info("token:" token2);
vars.put("token3",token2);
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhiakjjk
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22