Jmeter-导入外部文件进行签名

Jmeter的BeanShell实在太不友好了,没有提示也看不了源码,支持的java版本也低,所以在使用Jmeter进行一些稍复杂的处理时就很难受。

签名方式

获取Json的所有键-值对,以&方式进行拼接,再进行Md5加密获得签名。json格式的值为字符串,如:

detail=[{"cellNo":"aaaa","unitNo":"bbbb","rackNo":"cccc","count":3,"realCount":3}]

参数格式

{
  "appId": "string",
  "timestamp": "string",
  "nonce": "string",
  "signature": "string",
  "clusterNo": "string",
  "orderNo": "string",
  "detail": [
    {
      "rackNo": "string",
      "unitNo": "string",
      "cellNo": "string",
      "count": 0,
      "realCount": 0
    }
  ]
}

纯BeanShell处理

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.config.Argument;
//import org.json.JSONObject;
//import org.json.JSONArray;
import org.apache.commons.codec.digest.DigestUtils;    //导入md5加密的包
import java.text.SimpleDateFormat; 	//获取时间戳
import com.alibaba.fastjson.*;


//  1.获取请求body值,并处理字符串
Arguments arguments =  sampler.getArguments();
Argument arg = arguments.getArgument(0);
String body = arg.getValue();
//log.info(">>>>>>>>>>>>>>>>>{}",body);
body=body.replaceAll("\\n|\\r|\\t","");
log.info(">>>>>>>>>>>>>>>>>body{}",body);


//	2.将body字符串转换成JSONObject,并添加固定的参数和appSecret
JSONObject body_jsonObj= JSONObject.parseObject(body);	//包;org.json.JSONObject,没有该静态方法
//JSONObject body_jsonObj = new JSONObject(body);
//log.info("..........>"+body_jsonObj.get("detail").toString());
String appSecret=vars.get("appSecret");			//appSecret信息
String timestamp=(System.currentTimeMillis()/1000).toString();	//10位时间戳a信息
String nonce=vars.get("nonce");	//nonce信息
String appId=vars.get("appId");	//nonce信息
body_jsonObj.put("appSecret",appSecret);
//body_jsonObj.put("timestamp",timestamp);
//body_jsonObj.put("nonce",nonce);
//body_jsonObj.put("appId",appId);
log.info("..........yy>"+body_jsonObj.get("detail").toString());


//	4.获取json的键数组,并升序排列
Set body_keys = body_jsonObj.keySet();
Object[] arr=body_keys.toArray();
//Arrays.sort(arr,Collections.reverseOrder());	//降序
Arrays.sort(arr);	//升序
//for(Object value:arr)
//{
	//log.info(value.toString());
//}


//	5.按照方式“键=值” 拼接json的所有键值对
StringBuffer sb=new StringBuffer();
for (Object key : arr){
	String value = null ==body_jsonObj.get(key) ? "":body_jsonObj.get(key).toString();
	log.info(key+"="+value);
	sb.append(sb.toString().length()==0?key+"="+value:"&"+key+"="+value);
}
log.info("-----------------4444");

String signString = sb.toString();
log.info(signString);


// 5.md5加密,得到sign签名值
String md5_after = DigestUtils.md5Hex(signString);   // md5加密
log.info(md5_after);


// 6.给jsonObject对象添加sign参数,并移除appSecret信息
body_jsonObj.put("signature", md5_after.toUpperCase());
body_jsonObj.remove("appSecret");

// 7.JSONObject 转字符串
String  postData = body_jsonObj.toString();
log.info(postData);

// 8.重新赋值请求的body参数
arg.setValue(postData);

这种方式获取的签名字符串格式是正确的,但是detail值的参数顺序会被打乱,而签名时是严格按照参数顺序来进行,所以签名会失败。经过验证,json.jar(20231023)的JSONObject body_jsonObj = new JSONObject(body)fastjson.jar(1.2.62)的JSONObject body_jsonObj= JSONObject.parseObject(body);都会改变参数顺序,由于没装java开发工具,不好研究方法参数。

导入外部文件

  1. java文件无包依赖
    可以直接调用,如:
source("D:\\Java\\Jmeter\\JSONTool.java");
log.info("--------------6666:"+JSONTool.Add(1,2));
public class JSONTool {
    public static int Add(int a,int b) {
        return a+b;
    }
 }  
  1. java文件有包依赖
    需要将java项目打包成jar文件,并且在测试计划中添加该外部资源,这里是vsc打包。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 序列化排序
    使用fastjson.jar,在字段上添加@JSONField(ordinal=x),即可实现按照指定字段顺序序列化,参考连接:JSON序列化后按对象中声明顺序序列化或者指定顺序序列化(Java)

    @JSONField(ordinal = 1)
    public String rackNo;
JMeter是一个开源的压力测试工具,用于对Web应用、应用程序接口(API)和其他网络服务进行性能测试。JMeter插件系统允许用户扩展JMeter的功能,并提供了一系列的插件来满足不同的测试需求。 `jmeter-plugins-cmn-jmeter-0.7.jar` 这个文件看起来像是 JMeter 的一个插件包,不过其版本信息似乎有些过时(0.7版),通常推荐使用最新的稳定版本以获得最佳功能和兼容性。 ### 下载步骤: 1. **访问官方站点**:首先前往 [Apache JMeter官方网站](https://jmeter.apache.org/) 或者 [Apache JMeter GitHub页面](https://github.com/apache/jmeter),获取关于最新版本的信息以及如何安装插件的相关指导。 2. **查找所需插件**:在网站上搜索 `Common Plugins` 或者直接输入 `jmeter-plugins-cmn` 来查找相关的插件列表。请注意,此插件的名称可能会有所不同,在最新的文档或API页面中,应找到对应的功能描述及下载链接。 3. **确认版本和兼容性**:在选择下载之前,请务必确认该插件是否与您当前使用的 JMeter 版本兼容。如果插件有多个版本供选择,请查阅它们之间的差异说明,选择最适合您的版本。 4. **下载并安装**:点击对应的下载链接,将文件保存到本地计算机上。然后打开JMeter,通过“添加JAR或目录”按钮,在JMeter的配置文件 `lib/ext` 目录下导入插件的 .jar 文件。确保在启动JMeter前已更新配置文件路径以包含新导入的插件。 5. **验证安装**:完成以上步骤后,重启JMeter并检查插件是否成功加载。通常,新插件会出现在JMeter的“取样器”、“监听器”等组件菜单中,你可以从这里确认插件是否可用。 ### 安全提示: - 确保下载来自可信源的插件。避免从不可信或未经授权的第三方站点下载文件,以防恶意软件感染。 - 使用杀毒软件扫描文件以确保安全性。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值