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外部组件引用

想法

首先肯定这脚本有问题

  1. 如果get请求再多一个参数的话,需要手动将参数接收放入到date中才能进行排序
  2. 如果原本参数中带有“&”或者“=”这两特殊符号的话,截取的参数就会出现问题
  3. 我如果将HTTP请求放在BeanShell请求前面的话,那后面就不会再请求,如果放在后面的话,那Get请求还是没有赋值改变,我目前的做法是请求两次,因为第一天写这个玩意,听测试的说有一个BeanShell预处理程序,但是还不知道怎么用,在取样器中能执行的在预处理程序中却有报错,而且好像一样没有将处理好的数据放入请求中
  4. 而且取值都是用的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);
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值