使用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);
相关推荐
安然无虞2 天前
性能测试·基础理论和指标
测试工具·jmeter·压力测试
安然无虞2 天前
性能测试·流程
测试工具·jmeter·压力测试
write19942 天前
01 jmeter插件以及安装
jmeter
玖釉-3 天前
JMeter 测试计划(Test Plan)与脚本结构详解
jmeter
天才测试猿3 天前
Jmeter命令行压测&生成HTML测试报告
软件测试·测试工具·jmeter·职场和发展·jenkins·测试用例·压力测试
@Dream-fennel3 天前
WebSocket教程:如何使用JMeter进行压力测试
websocket·jmeter·压力测试
程序员三藏3 天前
Jmeter的三种参数化方式
自动化测试·软件测试·python·测试工具·jmeter·测试用例·压力测试
玖釉-3 天前
JMeter 采样器(Sampler)全指南
jmeter
西江649765 天前
【个人博客系统—测试报告】
python·功能测试·jmeter·pycharm·postman