03. Jmeter加解密
2024年10月28日大约 2 分钟
03. Jmeter加解密
JMETER中请求加密,响应结果解密,并将解密结果展示在结果树中
1.问题背景:jmeter中发送http请求需要对数据做加密处理,返回的结果也是加密,需要对返回结果进行解密操作,并将解密后的结果显示在结果树中. 2.思路:在http请求中添加前置处理(加密),并且添加后置处理器(对结果解密). 3.踩过的坑:jmeter中不支持map指定数据类型,比如Map(String,String) map=new HashMap(String,String)<>;可以直接使用Map map=new HashMap(); 或者直接可以使用JSONObject map = new JSONObject();只需要引入fastJson即可,存储方便赞..... 4.具体操作步骤 (1).将fastjson和加解密jar包放到JMeter的lib目录的ext目录下,即jmeter的classpath目录,不会因为变更线程组导入的包失效; (2).添加一个http请求.并在http上右击添加一个前置处理器
(3).在前置处理器中添加加密代码,并将结果保存做为http请求的参数;
import 引用加解密包.*;
import com.alibaba.fastjson.JSONObject;
JSONObject map = new JSONObject();//参数使用JSONObject存储
map.put("idType", "02");
map.put("orderNo", ${__Random(1,1000,)});
//调用加密方法,将参数传入,得到加密数据,注意私钥引用需要加引号""
String data = RSAUtil.enStr(map.toJSONString(), "${privateKey}");
//存储为data,在http中就可以通过${data}直接引用了
vars.put("data", URLEncoder.encode(data, "utf-8"));
(4).在http请求中引用加密数据,作为请求参数传递.
(5).给http请求添加后置处理器,处理响应的加密结果.
如何不做处理,结果树显示的结果是这样的
import 引入加解密包.*;
//prev.getResponseDataAsString()这个方法为获取响应的所有结果.刚开始我以为prev为前置处理器的名称,后来发现是内置对象,就需要用prev取
String enResult=RSAUtil.deStr(prev.getResponseDataAsString(),"${privateKey}");
//prev.setResponseData()这个方法是为结果树显示的结果重新赋值的方法
prev.setResponseData(enResult);
vars.put("enResult",RSAUtil.deStr(prev.getResponseDataAsString(),"${privateKey}"));
只要prev.getResponseDataAsString()和 prev.setResponseData()方法找到,就可以轻松搞定了.
最后的结果为
ps:调试的时候可以添加BeanShell Sampler和Debug Sampler,只要代码正确,结果都可以正常显示,也可以看到你存储和取的值是否正常显示.非常好用.