beanshell内置方法获取header、url、参数等信息用于计算验签

先上代码

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.http.control.HeaderManager;
import org.apache.jmeter.protocol.http.control.Header;
import java.util.*;
import com.google.gson.Gson;
import GenerateSign;
import org.apache.jmeter.protocol.http.util.HTTPArgument;

GenerateSign mysign = new GenerateSign();
HeaderManager headerManager = sampler.getHeaderManager();
Map headerMap = new HashMap();

if(headerManager != null){
for(int i=0;i<headerManager.size();i++){
     Header header = headerManager.get(i);
     headerMap.put(header.getName(),header.getValue());
    }
}
//获取ua
String ua = headerMap.get("User-Agent");

//获取请求路径
String path = sampler.getUrl().getPath();
//获取域名
String Host = sampler.getUrl().getHost();
//获取协议
String protocol = sampler.getUrl().getProtocol();
//拼接URL
String requestUrl = protocol + "//" + Host + path;
//获取query部分
String requestQuery = sampler.getUrl().getQuery();
//获取请求方法返回值为大写GET
String method = sampler.getMethod();

Arguments args = sampler.getArguments();
//获取请求参数
int n = args.getArgumentCount();
//参数存入map中
Map params = new HashMap();

if(method.equals("POST")){
    params = mysign.generate_map(requestQuery);
}else{
    //获取参数名
    //log.info(args.getArgument(0).getName());
    //获取参数值
    //log.info(args.getArgument(0).getValue());
    for(int x=0;x<n;x++){
        params.put(args.getArgument(x).getName(),args.getArgument(x).getValue());
    }
}
String gatesign = mysign.getSign(params,ua,requestUrl);
String gatets = mysign.getTime();
// 添加请求参数,不会添加到query中去
//args.addArgument(new HTTPArgument("gatesign",gatesign));
//args.addArgument(new HTTPArgument("gatets",gatets));
// 把验签参数加到query中去
String path_send = sampler.getPath()+"&gatesign="+gatesign+"&gatets="+gatets;
// 重新设置path
sampler.setPath(path_send);

api参考地址
https://jmeter.apache.org/api/org/apache/jmeter/protocol/http/sampler/HTTPSampleResult.html

https://jmeter.apache.org/api/org/apache/jmeter/config/Arguments.html //参数相关方法

https://jmeter.apache.org/api/org/apache/jmeter/protocol/http/control/Header.html

https://jmeter.apache.org/api/org/apache/jmeter/protocol/http/control/HeaderManager.html#getHeader-int- //所有获取header的方法

https://jmeter.apache.org/api/org/apache/jmeter/protocol/http/sampler/HTTPSamplerProxy.html#HTTPSamplerProxy-- //里面有sample的所有方法

说一说坑
1.beanshell里面使用map时不能指定类似于java的Map<String,String> map = new HashMap<String,String>(),这样写会报错,只能用Map params = new HashMap();这种方式

2.HeaderManager headerManager = sampler.getHeaderManager();这个方法不能获取默认的header,只能获取自己添加的header信息,比如自己再header里面加的token信息,默认的header信息,例如User-Agent是获取不到的,在获取headers之前一定要先判断一下header列表是否为空,如果不为空直接获取会报错

3.log.info()接收的参数只能是字符串,其他类型会报错

4.里面的字符串必须要用双引号括起来,单引号不行

介绍一些内置其他的函数
vars:可以操作变量,例如,vars.get(“token”),获取jmeter变量名为token的值,注意要用英文双引号,vars.put(key,value),设置系统变量

prev:获取当前请求的结果prev.get()

props:获取jmeter属性,生成/更新/获取当前脚本的jmeter属性,props.get(key) props.put(key,value)

ctx:获取当前线程的上下文,例子如下

import org.apache.jmeter.samples.SampleResult

SampleResult result = ctx.getPreviousResult();

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值