MeterSphere入参加密踩坑记录

需求:应公司要求需把项目接口接入MeterSphere,Jenkins部署时实现接口自动化测试。项目接口有统一加密方式,所以想写一个统一的前置脚本,减少工作量。 

ps:我想实现的效果是body里放明文参数,经过前置脚本操作后,把处理后的参数放入body里。本来以为MeterSphere应该和Yapi,Apifox差不多,应该会有获取body参数与放入的方法,结果竟然没有(!!!),需要导入其他jar包。

登录MeterSphere后,点击系统设置-->环境管理-->找到要加入全局前置脚本的项目,点击编辑

MeterSphere入参加密踩坑记录_第1张图片

 然后点击“单个请求步骤前执行”,(ps:单个接口前置脚本都可以用多个语言编写,全局前置脚本只能用beanshell编写,不知道是不是版本问题)

然后就可以按照获取body明文数据-->将数据加密-->加密后数据重新置入body里的思路来进行了。

import org.apache.jmeter.config.Arguments;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

String accessKey = "加密key";
String secretKey = "偏移量";

//获取接口请求body里数据
Arguments args = sampler.getArguments();
String requestBody = args.getArgument(0).getValue();
log.info(requestBody);

//加密方法
public static String aesEncrypt(String src, String secretKey, String iv) throws Exception {
    byte[] raw = secretKey.getBytes("UTF-8");
    SecretKeySpec secretKeySpec = new SecretKeySpec(raw, "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    IvParameterSpec iv1 = new IvParameterSpec(iv.getBytes());
    cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, iv1);
    byte[] encrypted = cipher.doFinal(src.getBytes("UTF-8"));
    return Base64.encodeBase64String(encrypted);
}

try {
    //调用加密算法生成签名
    String signature = aesEncrypt(requestBody, secretKey, accessKey);
    log.info(signature);
    //将加密后的数据重新放入body里
    args.getArgument(0).setValue(signature);
} catch (Exception e) {
    e.printStackTrace();
}

你可能感兴趣的:(metersphere)