Jmeter接口请求Base64加解密

时间:2024-04-05 12:41:47

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接口请求Base64加解密

   另一种是进入jmeter的\lib\ext目录下,放入。

      下面进行实际操作部分

 

 1.需要导入相应的java包,我用的第一种方式,直接在jmeter中导入

Jmeter接口请求Base64加解密

2.创建线程组

3.建立http请求,Jmeter接口请求Base64加解密

4.接下来需要建立前置处理器,前置处理器运行在http请求之前,但切记在http请求下面进行添加Jmeter接口请求Base64加解密

Jmeter接口请求Base64加解密

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

Jmeter接口请求Base64加解密

 

添加查看结果数,就成功了。