性能测试: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

相关推荐
DeepVisionary2 小时前
谷歌 Gemini Omni 1.1 Flash 正式发布:4K 视频、40 秒场景延伸,视频生成进入按 token 计费时代
python·自动化
阡之尘埃3 小时前
Python数据分析案例85——大模型微调全流程(SFT的LoRA微调)
人工智能·python·深度学习·语言模型·llm·微调·千问
海兰3 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(三)
javascript·python·金融
cvcode_study3 小时前
Ollama+ComfyUI 多模态
大数据·人工智能·python
众壹新能源科技3 小时前
功率预测误差考核怎么降?从气象源到上报口径的排查清单
运维·人工智能·自动化
星核0penstarry5 小时前
试一试用gr.Workflow把AI多步骤串联变成可视化画布
人工智能·python·ai作画·api·ai编程·工作流·api聚合平台
taller_20005 小时前
【005】PiE 与传统 VBA 的核心区别
python·vba·pie·py
海兰5 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(一)
javascript·python·金融
大衛說5 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习
小猴子爱上树5 小时前
跨境电商翻译工具推荐:批量图片翻译、视频字幕翻译、智能抠图一站式搞定
人工智能·python·音视频