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

公司接口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。解决重复问题。

你可能感兴趣的:(Jmeter接口sign签名jar包封装及使用采坑日志)