性能测试:Jmeter-Beanshell请求加密实例

发表于:2019-10-08 11:38

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:大宇yu    来源:博客园

#
Jmeter
#
JMeter
分享:
  进行性能测试时,有可能遇到一种场景:接口请求由于安全问题,需要进行加密发送。
  这种场景下,使用Jmeter实现性能测试,则也需要使用同样的加密规则发送请求报文。
  要实现此类性能测试有几种策略:
  直接去除密文规则 - 由于报文加密并非性能关键,那么简单起见,直接测试明文请求一定程度上是可以接受的。
  使用同样的加密规则加密报文发送 - 这样处理显然更接近实际场景,所以是一般比较推荐的做法。
  本文讨论使用Jmeter发送加密请求实现性能测试。
  1. 打包加密方法Jar包,导入Jmeter
  首先,确认被测产品的加密策略。
  这个过程应该通过阅读接口定义文档,询问开发人员,辅以抓包解析。
  比如说,对于创建订单接口的抓包结果:
  请求报文:
   POST https://ops.********.cn/***-api/member/system/login HTTP/1.1
  Accept-Language: zh-CN,zh;q=0.8
  User-Agent: Mozilla/5.0 (Linux; U; Android 6.0.1; zh-cn; Redmi 4A Build/MMB29M) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
  token: 90e76710e105b217d185832057220cdd
  appCode: ******
  compCode: ****
  Content-Type: application/x-www-form-urlencoded
  Content-Length: 99
  Host: ops.********.cn
  Connection: Keep-Alive
  Accept-Encoding: gzip
  account=*********&password=2ac9cb7dc02b3c0083eb70898e549b63&sign=4b9932154067b4a35bd4c2e9eba8036f
   以上的请求可以分析得出,加密的部分主要是password参数以及验签码sign(本例中是对请求参数部分加密,实际上整体报文加密可能更常见)。
  然后,我们需要准备相应的加密方法。
  这里推荐让开发人员直接给出产品原始的加密方法,予以导出形成jar包,以保证性能测试的加密方法与产品原始加密规则一致。
  或者如果明确加密方式,也可以使用第三方加密jar包,或者自己编写。这里更推荐第一种,与开发协调取得。
  最后,将准备好的jar包,导入Jmeter测试计划当中。
  2. 加密参数
  使用BeanShellPreProcessor,实现对请求的加密。
  思路是:
  导入使用第一步中的jar包作为加密工具库
  使用特定密钥,对需要加密的字段进行加密处理
  将加密后的字段存储为变量,供接口调用使用。
  BeanShell代码如下:
   import cn.hutool.json.JSONUtil;
  import com.***.controller.HttpClientUtil;
  import com.***.encrypt.EncryptUtil;
  import com.***.encrypt.gmhelper.MD5Util;
  import java.util.HashMap;//设置密钥
  String signKey = "47fbbbd********0b8d7378";
  //读取用户账户变量
  String useraccount = vars.get("user");
  String pass = vars.get("pass");
  //加密处理
  paramMap = new HashMap();
  String password = MD5Util.encrypt(pass);
  paramMap.put("account", useraccount);
  paramMap.put("password", password);
  String sign = EncryptUtil.md5sign1(paramMap, signKey).toLowerCase();
  //将加密后的参数存储为变量
  vars.put("password",password);
  vars.put("sign",sign)
  随后,只要在接口请求当中,使用变量的形式传参,即可实现请求报文部分加密传送。
  调用接口发送请求,验证得知报文加密已实现:
  同理可以实现多个不同接口的请求加密过程,整体Jmeter项目构成如下:

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号