• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

JMeter 从GET请求获取到参数并排序进行MD5加密更新

武飞扬头像
喜欢吃糖丶
帮助1

帮测试人员写一下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);
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhiakjjk
系列文章
更多 icon
同类精品
更多 icon
继续加载