Jmeter 拦截请求并修改数据(可用于生成签名sign等或者动态获取数据)

本文介绍如何使用JMeter的Beanshell拦截HTTP请求,动态修改POST Body Data,包括参数处理和添加额外数据。提供了代码实现及jar包引入方法,推荐参考JMeter官方API以了解更多信息。

本文基本没有上面文字,因为存粹是代码实现,关于参数的一些讲解,已经在代码中写了注释,当然如果想了解更多的一些用法,建议参考Jmeter官网API:https://jmeter.apache.org/api/org/apache/jmeter/ 

效果

请求前自定义的POST Body Data

通过Beanshell拦截,并进行参数处理以及额外数据添加后真正发出的请求Body Data 

代码实现 

import java.util.*;
import org.apache.commons.codec.digest.DigestUtils; 
import org.apache.jmeter.config.*; 
//需要引入处理JSON的包
import com.alibaba.fastjson.JSON;  
import com.alibaba.fastjson.JSONObject;

// 截获请求,包含url、headers 和 body
Arguments args = sampler.getArguments(); 
log.info("args : " + args.toString());
// 获取请求body
Argument arg_body = args.getArgument(0); 
// 获取body的值保存成字符串
String body = arg_body.getValue();  
 // 打印下看看,跑自动化\性能时把log注释掉
log.info("body : " + body); 
// 把body转成json对象,注意!这里因为body本身就是json字符串,所以用json类处理,xml或其他格式的不能这样处理!!
JSONObject jso = JSON.parseObject(body);  
// 获取body中的AppKey,下面签名会用到
String id = jso.getString("id");  
log.info("id : " + id);
// 获取Data,下面签名会用到
String amount = jso.getString("amount");   
log.info("amount : " + amount);
//生成一个时间
Date date = new Date();
//拼接签名串
String content = "id=" + id + "&amount=" + amount + "&date="+date;
//content = String.format(content,id,amount,date);
log.info("content : " + content);
//生成签名
String sign = DigestUtils.md5Hex(content);
//替换 timestamp 和 sign 字段的值到jsonObject
jso.put("date",date);
jso.put("sign",sign);
body = jso.toString();
log.info("body json : " + body);
// 将新body替换到取样器的参数中,实现了截获 → 修改 → 发送修改后的内容
arg_body.setValue(body); 

上面需要引入处理Json的jar包,如果引入:

因为自己的工具对于Jmeter来说是三方插件,所以需要打包并加入到Jmeter中。

方式一:将打包放入到  apache-jmeter-5.1\lib\ext 中间中,注意需要先关闭,放入后重新打开Jmeter,否则不会生效。 

方式二:点击 TestPlan  最下方 Browse引入包就OK。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值