美文网首页
Jmeter接口sign签名jar包封装及使用采坑日志

Jmeter接口sign签名jar包封装及使用采坑日志

作者: IT媛 | 来源:发表于2020-03-12 14:22 被阅读0次

公司接口sign值采用RSA签名,压力测试需要Jmeter模拟sign值,研发时间紧任务重无法给提供jar包,所以只能自己动手丰衣足食。

一、首先扒研发代码

我们公司测试有查看代码权限,把接口工程clone下来,找到签名和解签的java类。发现方法不适用于封装jar提供给Jmeter使用,所以需要改造。

二、复制粘贴修改

主要方法上代码:

public static String sign(byte[] priKeyText, String plainText) throws Exception {
    try {
        PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.decodeBase64(priKeyText));
        KeyFactory keyf = KeyFactory.getInstance("RSA");
        PrivateKey prikey = keyf.generatePrivate(priPKCS8);
        // 用私钥对信息生成数字签名
        Signature signet = Signature.getInstance("");
        signet.initSign(prikey);
        signet.update(plainText.getBytes("UTF-8"));
        byte [] signb=signet.sign();
        String signStr=new BASE64Encoder().encode(signb);
        signStr=signStr.replaceAll("\r|\n", "%0A").replaceAll("/", "%2F").replaceAll("\\+", "%2B").replaceAll("\\=", "%3D");
        return  signStr;
    } catch (Exception e) {
        throw e; 
    }
}

网上百度方法一堆,为啥把代码贴一下呢,是因为这里后面调用jar包时踩的坑。

三、写完封jar包

至于怎么打jar包,万能的百度。


image.png image.png image.png image.png image.png

四、Jmeter测试

Jmeter如何调用jar,自行百度
Jmeter使用遇到的坑。

a.sign正常生成了,但是Jmeter发送请求一直请求失败。

分享原因及解决方法:
签名与实际fiddler抓包的签名做对比
jmeter生成签名格式

uDOMiWd…………

fiddler抓包查看SyntaxView签名格式

     j%2FODVjsATH9HI0rbIZsPWdZwRUhUS7l5…………

解决办法,java文件,将"空格"、“/”、“+”、“=”替换

signStr=signStr.replaceAll("\r|\n", "%0A").replaceAll("/", "%2F").replaceAll("\\+", "%2B").replaceAll("\\=", "%3D");

解决后重新打包,即可正常发送请求。

b.解决非法链接后,循环发送请求,第一个请求发送成功,其它请求均提示为重复请求。

BeanShell sampler,在此生成随机数和时间戳,加签,然后将参数传给url。解决重复问题。

import signtest.SignUtilJar;
import java.util.UUID;

String version=vars.get("version");
String caller_type= vars.get("caller_type");
String nonce="";
String timestamp= "";

nonce  = UUID.randomUUID().toString();
long time = System.currentTimeMillis();
timestamp=time+"";

String sign ="";
SignUtilJar signUtilJar = new SignUtilJar();
sign=signUtilJar.getSign(version,caller_type,nonce,timestamp);

vars.put("sign",sign);
vars.put("nonce",nonce);
vars.put("timestamp",timestamp);

相关文章

网友评论

      本文标题:Jmeter接口sign签名jar包封装及使用采坑日志

      本文链接:https://www.haomeiwen.com/subject/yskujhtx.html