jmeter中用beanshell实现动态获取请求body进行加签

在jmeter压力测试的脚本编写时,经常会遇到接口中需要对请求体加生签的情况,这个时候可以用beanshell PreProcessor来实现对请求体的加签,但是有一点,就是需要我们拿到每个请求的body,如我们把每个请求的body都放到beanshell中,那么我们需要在每个请求(sampler)中都要添加一个beanshell,这样就有很多重复的工作要做,那么有没有办法能够动态的获取请求body,这样就可以只写一个beanshell前置处理器,然后就可以针对所有的请求实现加签?这里我做了一个demo,实现起来并不复杂,给大家分享一下。

关键点是如何动态获取body,要点如下:

  • beanshell中自带sampler变量,代表当前的请求,可以用来获取当前请求的相关信息
  • 通过sampler的getArguments()方法来获取请求参数
  • 通过getArguments()中获取的请求参数有是key=value格式,如果是url中的query参数,那么key和value与请求一致,如果是请求body,那么就没有key,直接是=body的格式

取到body后就可以对body进行加签,然后通过vars.put()方法将签名输出到变量供线程组中的sampler引用

具体代码如下:

String body ="";

Arguments args = sampler.getArguments();

it = args.iterator();

while(it.hasNext()){

argument = it.next();

String pair = argument.toString();

if(pair.startsWith("=")){

log.info("json"+pair);

body = pair.substring(1);

}

log.info(pair);

}



log.info("body:"+body);

String secret = vars.get("project_secret");

String accountsignature = getHMACSHA256(body,secret);

log.info(accountsignature);

vars.put("accountsignature",accountsignature);

 

实现后截图如下:

jmeter中用beanshell实现动态获取请求body进行加签_第1张图片

本文所述的方法参考了网友的贡献,贴上链接以表感谢:https://my.oschina.net/u/4282791/blog/3753402

你可能感兴趣的:(技术,jmeter,json,性能测试,beanshell,加签)