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

目录

[1. 打包加密方法Jar包,导入Jmeter](#1. 打包加密方法Jar包,导入Jmeter)

[2. 加密参数](#2. 加密参数)

总结:


进行性能测试时,有可能遇到一种场景:接口请求由于安全问题,需要进行加密发送。

这种场景下,使用Jmeter实现性能测试,则也需要使用同样的加密规则发送请求报文。

要实现此类性能测试有几种策略:

  1. 直接去除密文规则 - 由于报文加密并非性能关键,那么简单起见,直接测试明文请求一定程度上是可以接受的。
  2. 使用同样的加密规则加密报文发送 - 这样处理显然更接近实际场景,所以是一般比较推荐的做法。

本文讨论使用Jmeter发送加密请求实现性能测试。

1. 打包加密方法Jar包,导入Jmeter

首先,确认被测产品的加密策略。

这个过程应该通过阅读接口定义文档,询问开发人员,辅以抓包解析。

比如说,对于创建订单接口的抓包结果:

请求报文:

python 复制代码
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,实现对请求的加密。

思路是:

  1. 导入使用第一步中的jar包作为加密工具库
  2. 使用特定密钥,对需要加密的字段进行加密处理
  3. 将加密后的字段存储为变量,供接口调用使用。

BeanShell代码如下:

python 复制代码
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项目构成如下:

总结:

感谢每一个认真阅读我文章的人!!!

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

Python自动化测试学习交流群: 全套自动化测试面试简历学习资料获取点击链接加入群聊【python自动化测试交流】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DhOSZDNS-qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=198408628

相关推荐
野蛮的大西瓜1 小时前
开源呼叫中心中,如何将ASR与IVR菜单结合,实现动态的IVR交互
人工智能·机器人·自动化·音视频·信息与通信
黄公子学安全2 小时前
Java的基础概念(一)
java·开发语言·python
程序员一诺2 小时前
【Python使用】嘿马python高级进阶全体系教程第10篇:静态Web服务器-返回固定页面数据,1. 开发自己的静态Web服务器【附代码文档】
后端·python
小木_.3 小时前
【Python 图片下载器】一款专门为爬虫制作的图片下载器,多线程下载,速度快,支持续传/图片缩放/图片压缩/图片转换
爬虫·python·学习·分享·批量下载·图片下载器
Jiude3 小时前
算法题题解记录——双变量问题的 “枚举右,维护左”
python·算法·面试
唐小旭3 小时前
python3.6搭建pytorch环境
人工智能·pytorch·python
是十一月末4 小时前
Opencv之对图片的处理和运算
人工智能·python·opencv·计算机视觉
爱学测试的李木子4 小时前
Python自动化测试的2种思路
开发语言·软件测试·python
kitsch0x975 小时前
工具学习_Conan 安装第三方库
开发语言·python·学习
梦幻精灵_cq5 小时前
《点点之歌》“意外”诞生记
python