jmeter加密解密(加密篇)

最近刚好在弄jmeter加密解密,可以分享下。(有一段时间没写了,有点不知道从何写起,这篇写的有点乱o(╥﹏╥)o)

需求是:计费接口中的请求体的部分参数需要加密再请求,返回的结果需解密,一句话概括就是请求加密,返回解密。

1、首先,先按照正常的请求弄好。

 

 2、然后,将开发提供给测试的加密解密的jar包添加到测试计划。当然,也可以直接将这些jar包放到jmeter安装目录jmeter\apache-jmeter-5.1.1\lib\ext中,这样就不用添加到测试计划中。(jar包有时候提供不齐全,如何确认自己的jar包是齐全的,下面会讲解)

 

3、然后,在请求(计费)下新建Beanshell预处理程序,像我们添加的这些jar包,Beanshell预处理程序也需要导入,这里的导入用import就行。(因为jar包里都是class文件,其实是看不到实际代码的,如何想看加密解密对应的方法,可以跟开发要这个加密解密类(RSAUtils)的java文件)

Beanshell与java编码是一样的逻辑,只是有些类型格式不同。

 

4、然后,下面就可以编写代码了。按照RSAUtils.java文件,加密有2种,私钥加密和公钥加密,对应的解密分别为私钥解密和公钥解密。这里只用一个讲解,用的例子是公钥加密和公钥解密。

公钥加密的方法是publicEncrypt(data, publicKey),也就是说我们需要设置2个变量:data和publicKey。其中data是json格式的。

扫描二维码关注公众号,回复: 10656574 查看本文章

 

先按照最简单的思路写,为了保证beanshell预处理程序里的代码是可以正常使用,先写死data和publicKey公钥的数值。(这里需要注意的一点是json在jmeter的beanshell中需要转义,不然会报错)

如果json不转义,会报错。比如:

String data = "{"cityAreaCode":"110100","distAreaCode":"110119","provinceAreaCode":"110000","templateId":"1239454139274485761","productId": "1245235805219303425","insuranceFlag": 1,"insurance": 300,"insuranceNum": 5.0,"insuranceValue":"9000"}";

System.out.println("json:"+data);//打印

日志报错信息:

Problem in BeanShell script. org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval    In file: inline evaluation of: ``import scloudcoreSNAPSHOT.*; import com.ems.gov.cloud.core.util.RSAUtils; import . . . '' Encountered "cityAreaCode" at line 13, column 18.

 

(如果json数值里本身有部分是有转义符的,则需要二次转义)

 

5、从RSAUtils.java文件中可以看到加密的方式publicEncrypt(data, publicKey),那我想拿到加密结果,那么也就是RSAUtils.publicEncrypt(data, publicKey)。那么beanshell预处理程序的加密代码就写好了:

 

打印出结果,这里看到已经加密成功了。

 

6、我们需要怎么将加密后的数值给到请求体中呢?如果直接使用beanshell预处理定义的加密结果encryptMsg变量,执行:

 

 

那么我们就需要定义一个全局变量,但这里也需要注意,不能设置在固定变量中,因为拿到的数值为空。要设置在测试就好中,我这里设置为sas,beanshell也需要加一行代码:vars.put("sas",encryptMsg);//将加密后的值赋值给全局变量

 

 

 

执行,看下结果:可以看到请求体已经拿到加密后的数值了。

 

到这里,加密就完成了。

如何判断jar包是否齐全:

这里我先注释掉一部分导入jar包和类,执行以下,会发现提示没找到JSONObject类和RSAUtils.publicEncrypt方法。因为一直提示这个,但又不知道是缺少了哪些jar包。一次偶然下,加了try{}catch(){},发现会提示具体少了哪些类,就可以让开发提供对应的jar包啦~

 

加了try{}catch(){}后,执行,发现会提示具体少了哪些jar包:

 

发现缺少com/baomidou/mybatisplus/toolkit/IOUtils,让开发导出对应的jar包,假设这个jar包名称:mybatisplussup,那么我们需要在测试计划中添加这个jar包,且beanshell预处理程序中,需要加2行代码:import mybatisplussupport.*;

import com.baomidou.mybatisplus.toolkit.IOUtils;

总结:日志是显示编译错误,比如变量类型、缺少方法这种,比较直观看出问题;用try{}catch(){}可以抛出缺少的类、结果null。

猜你喜欢

转载自www.cnblogs.com/lv-lxz/p/12672655.html