51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 864|回复: 2
打印 上一主题 下一主题

jmeter BeanShell PreProcessor 性能问题

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:47
  • 签到天数: 528 天

    连续签到: 1 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2021-11-26 10:20:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    1测试积点
    在 jmeter 中使用 beanshell 实现签名算法,如下图,在使用过程中发现,直接在 BeanShell PreProcessor 实现加密算法在执行过程中耗时较久,达到 200ms+,影响性能测试


    之后将签名算法打包成 jar 包,发现性能提升许多

    有哪位大佬可以告诉我这中间的区别吗?以及原因吗?
    具体代码
    1. import javax.crypto.Cipher;
    2. import javax.crypto.SecretKey;
    3. import javax.crypto.spec.IvParameterSpec;
    4. import javax.crypto.spec.SecretKeySpec;

    5. import org.apache.commons.codec.binary.Base64;
    6. import java.security.*;
    7. import java.security.spec.PKCS8EncodedKeySpec;

    8. import java.text.SimpleDateFormat;
    9. import java.util.Date;
    10. import java.text.DecimalFormat;

    11. public class App {
    12.     public static byte[] TripleDesEncrypt(byte[] content, byte[] key) throws Exception {
    13.         byte[] icv = new byte[8];
    14.         System.arraycopy(key, 0, icv, 0, 8);
    15.         return TripleDesEncrypt(content, key, icv);
    16.     }

    17.     protected static byte[] TripleDesEncrypt(byte[] content, byte[] key, byte[] icv) throws Exception {
    18.         final SecretKey secretKey = new SecretKeySpec(key, "DESede");
    19.         final Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
    20.         final IvParameterSpec iv = new IvParameterSpec(icv);
    21.         cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
    22.         return cipher.doFinal(content);
    23.     }

    24.     public static byte[] TripleDesDecrypt(byte[] content, byte[] key) throws Exception {
    25.         byte[] icv = new byte[8];
    26.         System.arraycopy(key, 0, icv, 0, 8);
    27.         return TripleDesDecrypt(content, key, icv);
    28.     }

    29.     protected static byte[] TripleDesDecrypt(byte[] content, byte[] key, byte[] icv) throws Exception {
    30.         final SecretKey secretKey = new SecretKeySpec(key, "DESede");
    31.         final Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
    32.         final IvParameterSpec iv = new IvParameterSpec(icv);
    33.         cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
    34.         return cipher.doFinal(content);
    35.     }
    36.     public static String sign(String content, String privateKeyPem,long time) {
    37.         try {
    38.             long startTime = System.currentTimeMillis();         
    39.         String privateKeyPem_String = privateKeyPem.replace("-----BEGIN PRIVATE KEY-----", "").replace("-----END PRIVATE KEY-----", "");
    40.         byte[] encodedKey = org.bouncycastle.util.encoders.Base64.decode(privateKeyPem_String.getBytes("UTF-8"));
    41.         long spendtime2 = System.currentTimeMillis() - startTime;
    42.         log.info("=====sign Base64 :"+ spendtime2);

    43.         long startTime3 = System.currentTimeMillis();
    44.         PrivateKey privateKey = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(encodedKey));
    45.         Signature signature = Signature.getInstance("SHA256WithRSA");

    46.         long spendtime4 = System.currentTimeMillis() - startTime3;
    47.         log.info("=====sign signature :"+ spendtime4);
    48.         long startTime1 = System.currentTimeMillis();
    49.         signature.initSign(privateKey);
    50.         long spendtime3 = System.currentTimeMillis() - startTime1;
    51.         log.info("=====sign initSign :"+ spendtime3);
    52.         signature.update(content.getBytes("utf-8"));
    53.         byte[] signed = signature.sign();
    54.         long spendtime5 = System.currentTimeMillis() - startTime1;
    55.         log.info("=====sign update :"+ spendtime5);
    56.         return new String(org.bouncycastle.util.encoders.Base64.encode(signed));
    57.         } catch (Exception var6) {
    58.             String errorMessage = "签名遭遇异常,content=" + content + " privateKeySize=" + privateKeyPem.length() + " reason=" + var6.getMessage();
    59.             // log.error("====error: "+errorMessage);
    60.             throw new RuntimeException(errorMessage, var6);
    61.         }
    62.     }

    63. }
    64. // ==============begin================
    65. String timestamp = String.valueOf(System.currentTimeMillis());
    66. vars.put("timestamp",timestamp);
    67. long startTime = System.currentTimeMillis();
    68. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
    69. Random rand = new Random();
    70. Integer randomNum = rand.nextInt(5000000) + 1000000;
    71. String randomNumStr = String.valueOf(randomNum);
    72. String order_id = sdf.format(new Date()) + randomNumStr;
    73. vars.put("order_id",order_id);

    74. double a=Math.random()*100 + 1.00;
    75. DecimalFormat df = new DecimalFormat( "0.00" );
    76. String pay_str=df.format(a);

    77. Random rand = new Random();
    78. Integer randomNum = rand.nextInt(5000000) + 1000000;
    79. String randomNumStr = String.valueOf(randomNum);
    80. String id_card = "430" + randomNumStr + "10104219";

    81. String private_key = vars.get("key");
    82. String dealer_id = "00243810";

    83. String data = "{\"order_id\":\""+order_id+"\",\"dealer_id\":\"\",\"broker_id\":\"\",\"real_name\":\"\",\"card_no\":\"\",\"phone_no\":\"\",\"id_card\":\"\", \"pay\":\""+pay_str+"\"}";
    84. byte[] des3key = "0857b75Fmev7mbTFuhUNa6Rt".getBytes("utf-8");
    85. byte[] enc = App.TripleDesEncrypt(data.getBytes("utf-8"), des3key);

    86. byte[] enc64 = Base64.encodeBase64(enc);
    87. String data64 = new String(enc64);
    88. vars.put("data",data64);

    89. // 进行sign
    90. String sign_data = "data=" + data64 + "&mess=test×tamp="+ timestamp + "&key=0aYxoR0s474JZns9kS09oXnA2e7Rz0fj";
    91. String sign = App.sign(sign_data, private_key, startTime);
    92. vars.put("sign",sign);
    复制代码


    附件: 您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    11 小时前
  • 签到天数: 1803 天

    连续签到: 2 天

    [LV.Master]测试大本营

    2#
    发表于 2021-11-29 09:30:54 | 只看该作者
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    10 小时前
  • 签到天数: 1518 天

    连续签到: 2 天

    [LV.Master]测试大本营

    3#
    发表于 2021-11-29 16:00:13 | 只看该作者
    可能是代码太复杂,每次都要解析一遍导致的?
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-19 20:34 , Processed in 0.060876 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表