jmeter 对报文进行Base64加解密心得。
业务需求是,对接口进行测试,但需要对报文进行加密,对返回的密文进行解密。
遇到的问题:接口传的报文字段,因为没有加密,所以报错,报请求报文为空。
第二个问题,对返回的数据的进行解密时,不清楚如何运用返回的数据,其中beanshell中,
-
prev - (SampleResult):获取前面的sample返回的信息,常用方法:
a) getResponseDataAsString():获取响应信息
b) getResponseCode() :获取响应code
第三个问题,对请求的报文进行加密后,要知道引用变量,
vars - (JMeterVariables):操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:
a) vars.get(String key):从jmeter中获得变量值
b) vars.put(String key,String value):数据存到jmeter变量中
引用变量${变量名称}
第四个问题导入jar包, 导入jar包本人知道有两种,一种是
另一种是进入jmeter的\lib\ext目录下,放入。
下面进行实际操作部分
1.需要导入相应的java包,我用的第一种方式,直接在jmeter中导入
2.创建线程组
3.建立http请求,
4.接下来需要建立前置处理器,前置处理器运行在http请求之前,但切记在http请求下面进行添加
import com.vbao.service.trade.VbaoChargeSystemHandler;
import com.vbao.service.trade.bean.request.SingleDFRequest;
import com.vbao.service.trade.bean.request.TradeRequestXml;
/** 1.字符集UTF-8 固定值不变 */
String InputCharset = "UTF-8";
/** 2.微保分配的商户号(生产会变) */
String customerNo = "201907020001";
/** 3.微保分配的商户**(生产会变) */
String key = "uTRF3mE1G8rHBekX7K4y";
/** 4.商户的商品代码(生产会变) */
String goodNo = "TYZXCS";
SingleDFRequest singleDFRequest = new SingleDFRequest();
singleDFRequest.setVersion("6.0");
singleDFRequest.setSignType("MD5");
singleDFRequest.setInputCharset(InputCharset);
singleDFRequest.setCustomerNo(customerNo);
singleDFRequest.setGoodNo(goodNo);
singleDFRequest.setActName("企业账户");
singleDFRequest.setActId("2333222222");
singleDFRequest.setActLineCode("373737373737");
singleDFRequest.setOrderNo("155497874566859");
singleDFRequest.setOrderAmount("0.01");
singleDFRequest.setAccType("0");
singleDFRequest.setBankCardType("0");
singleDFRequest.setBankCode("ICBC");
singleDFRequest.setBankCardNo("");
singleDFRequest.setBankCardName("");
singleDFRequest.setCertType("0");
singleDFRequest.setCertId("123456789098765");
singleDFRequest.setMobile("18612252227");
singleDFRequest.setCreditValid("");
singleDFRequest.setCreditCvv2("");
singleDFRequest.setBankProvince("");
singleDFRequest.setBankCity("");
singleDFRequest.setBankLineCode("");
singleDFRequest.setBankName("银行名称");
singleDFRequest.setProductName("摘要信息");
singleDFRequest.setProtocolNo("");
singleDFRequest.setProductDesc("描述");
singleDFRequest.setNotifyUrl("");
singleDFRequest.setExt1("备注1");
singleDFRequest.setExt2("备注2");
// 分支结构和销售渠道
singleDFRequest.setBranch1("bran1");
singleDFRequest.setBranch2("二级分支机构");
singleDFRequest.setBranch3("三级分支机构");
singleDFRequest.setSalesChannel("aa");
VbaoChargeSystemHandler vbaoChargeSystemHandler = new VbaoChargeSystemHandler();
// 组装发送报文
TradeRequestXml tradeRequestXml = vbaoChargeSystemHandler.creatRequestXml(singleDFRequest, key, InputCharset, "1101");
String a=tradeRequestXml.getRequestXml();
vars.put("a",a);
System.out.println("发送密文报文:" + tradeRequestXml.getRequestXml());
log.info(a);
在这用beanshell添加变量,然后再请求引用这个字段。
最后弄解密的,在后置处理器里面建立beanshell
添加查看结果数,就成功了。