使用Beanshell前置处理器对Jmeter的请求body进行加密

这里我们用HmacSHA256来进行加密举例:

步骤:

1.先获取请求参数并对请求参数进行处理(处理成String类型)

java 复制代码
//处理请求参数的两种方法:
//方法一:
//获取请求
Arguments args = sampler.getArguments();
//转化为String字符串,因直接用args.toString()转结果后前面带了"="号,后面带有"()",所以要用replace()先把把括号去掉
String data = args.toString().replace("(", "").replace(")", "");

//因为获取到的字符串是从"="号开始的,所以用substring(1)方法表示从第二个字符开始获取
String body = data.substring(1);


//方法二:
//获取请求参数
Arguments args = sampler.getArguments();
log.info(""+args);
//保存到Map数组里面
Map reqMap = args.getArgumentsAsMap();

String body = "";
//循环key
for (String key : reqMap.keySet()) {
	//获取key对应的值
	body = reqMap.get(key);
  	log.info("------------------"+body);
}

2.对数据进行加密------------两种方法

1).直接在Beashell中进行加密

java 复制代码
//获取密钥
String certkey = "******";  //这个是公司自己的密钥

//创建实例
Mac hmacSHA256 = Mac.getInstance("HmacSHA256");
SecretKeySpec secertKey = new SecretKeySpec(certkey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
hmacSHA256.init(secertKey);

//计算签名
byte[] hmacResult = hmacSHA256.doFinal(body.getBytes(StandardCharsets.UTF_8));
String signature = new String(Base64.getEncoder().encode(hmacResult), StandardCharsets.UTF_8);

2).在java里面编写好加密方法,导出jar包,把导出的jar包放入C:\*****\apache-jmeter-5.5\lib\ex目录下------------(看补充部分)。

3.把加密后的参数保存到变量中,方面后面引用

java 复制代码
vars.put("check_data",signature);

整体代码展示:

java 复制代码
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import org.apache.jmeter.config.Arguments;


//获取请求参数的两种方法:
//方法一:
获取请求参数
//Arguments args = sampler.getArguments();
//log.info(""+args);
转化为String字符串,因直接用args.toString()转结果后前面带了"="号,后面带有"()",所以要用replace()先把把括号去掉
//String data = args.toString().replace("(", "").replace(")", "");
//log.info("1-------------------------"+data);
//
因为获取到的字符串是从"="号开始的,所以用substring(1)方法表示从第二个字符开始获取
//String body = data.substring(1);

//log.info("2----------------------------------------------"+body);


//方法二:
//获取请求参数
Arguments args = sampler.getArguments();
log.info(""+args);
//保存到Map数组里面
Map reqMap = args.getArgumentsAsMap();

String body = "";
//循环key
for (String key : reqMap.keySet()) {
	//获取key对应的值
	body = reqMap.get(key);
  	log.info("------------------"+body);
}


//获取密钥
String certkey = "******************";  


调用encodeSHA256方法
//String encode_str = HmacSHA256.encodeSHA256(certkey,body);

//创建实例
Mac hmacSHA256 = Mac.getInstance("HmacSHA256");
SecretKeySpec secertKey = new SecretKeySpec(certkey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
hmacSHA256.init(secertKey);

//计算签名
byte[] hmacResult = hmacSHA256.doFinal(body.getBytes(StandardCharsets.UTF_8));
String signature = new String(Base64.getEncoder().encode(hmacResult), StandardCharsets.UTF_8);
vars.put("Check_data",signature);

补充.在java里面编写好加密方法,导出jar包,把导出的jar包放入C:\*****\apache-jmeter-5.5\lib\ex目录下

1.创建一个新的Maven项目

2.编写java代码:

java 复制代码
package com.test.hmacSHA256;

import com.alibaba.fastjson.JSONObject;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

public class HmacSHA256 {

    public static String encodeSHA256(String cerKey, String data) throws NoSuchAlgorithmException, InvalidKeyException {
        //创建实例
        Mac hmacSHA256 = Mac.getInstance("HmacSHA256");
        SecretKeySpec secertKey = new SecretKeySpec(cerKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
        hmacSHA256.init(secertKey);

        //计算签名
        byte[] hmacResult = hmacSHA256.doFinal(data.getBytes(StandardCharsets.UTF_8));

        // 返回加密后的字符串
        return new String(Base64.getEncoder().encode(hmacResult), StandardCharsets.UTF_8);

    }

}

3.导出jar包:

先点clean,再点package,最后在target目录下出现了jar包

4.把jar包放进C:\*****\apache-jmeter-5.5\lib\ex目录下

5.Beashell 里面导入包

java 复制代码
import com.test.hmacSHA256.HmacSHA256;  //导入类,也就是类的路径

6.调用方法:

java 复制代码
//调用encodeSHA256方法
String encode_str = HmacSHA256.encodeSHA256(certkey,body);

7.Beashell 整体代码展示

java 复制代码
import org.apache.jmeter.config.Arguments;

import com.test.hmacSHA256.HmacSHA256;  //导入类,也就是类的路径


//获取请求参数的两种方法:
//方法一:
获取请求参数
//Arguments args = sampler.getArguments();
//log.info(""+args);
转化为String字符串,因直接用args.toString()转结果后前面带了"="号,后面带有"()",所以要用replace()先把把括号去掉
//String data = args.toString().replace("(", "").replace(")", "");
//log.info("1-------------------------"+data);
//
因为获取到的字符串是从"="号开始的,所以用substring(1)方法表示从第二个字符开始获取
//String body = data.substring(1);

//log.info("2----------------------------------------------"+body);


//方法二:
//获取请求参数
Arguments args = sampler.getArguments();
log.info(""+args);
//保存到Map数组里面
Map reqMap = args.getArgumentsAsMap();

String body = "";
//循环key
for (String key : reqMap.keySet()) {
	//获取key对应的值
	body = reqMap.get(key);
  	log.info("------------------"+body);
}


//获取密钥
String certkey = "********************";  


//调用encodeSHA256方法
String encode_str = HmacSHA256.encodeSHA256(certkey,body);

//把加密好的字符串添加到check_data变量中,后面需要用就直接用${x-checkSum}进行引用
vars.put("check_data",encode_str);
相关推荐
文人sec3 天前
性能测试-jmeter9-逻辑控制器、定时器压力并发
测试工具·jmeter·性能优化·模块测试
CesareCheung4 天前
JMeter分布式压力测试
分布式·jmeter·压力测试
测试界清流4 天前
jmeter使用技巧
jmeter
春时似衿里4 天前
jmeter配置数据库连接步骤
数据库·jmeter
新知图书4 天前
JMeter的安装部署
jmeter
程序员杰哥4 天前
什么是Jmeter? Jmeter工作原理是什么?
自动化测试·软件测试·python·测试工具·jmeter·职场和发展·测试用例
乐神嘎嘎嘎4 天前
Jmeter测试
jmeter
卓码软件测评5 天前
第三方软件测试机构【性能测试工具用LoadRunner还是JMeter?】
java·功能测试·测试工具·jmeter·性能优化
BatyTao5 天前
Jmeter执行数据库操作
数据库·jmeter
二宝哥5 天前
性能测试工具Jmeter之java.net.BindException: Address already in use
jmeter